Xslt 在转换之前是否有一种干法转换值?

Xslt 在转换之前是否有一种干法转换值?,xslt,Xslt,假设我有以下xml <root> <data> <a>ATTITUDE_ANNOYED</a> <b>ATTITUDE_CAUTIOUS</b> <c>25</c> <d>30</d> </data> </root> 这就是C或D等值。它们的范围在0-50之间,为了可读性,应该将其转换为0-10格式。这些价值观中

假设我有以下xml

<root>
  <data>
    <a>ATTITUDE_ANNOYED</a>
    <b>ATTITUDE_CAUTIOUS</b>
    <c>25</c>
    <d>30</d>
  </data>
</root>
这就是C或D等值。它们的范围在0-50之间,为了可读性,应该将其转换为0-10格式。这些价值观中也有不少

还有一些转换,如“GoodieBaddie”,从0到10不等。我们希望将其转换为:

0-3  -> Bad(x)
4-6  -> Neutral(x)
7-10 -> Good(x)
其中(x)是原始值。
我是在为这项工作使用正确的工具,还是处于临界状态?我认为XLST将是一个很好的选择,使其他贡献者不必依赖开发人员来更改格式/布局(因为XLST比C#或Python更容易编辑)。

此转换:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:my="my:my">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <my:attitudes>
   <a val="1">ANNOYED</a>
   <a val="2">CAUTIOUS</a>
   <a val="3">PLEASED</a>
 </my:attitudes>

 <xsl:variable name="vAttitudes" select="document('')/*/my:attitudes/*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="*[starts-with(., 'ATTITUDE_')]/text()">
  <xsl:variable name="vVal" select=
  "$vAttitudes[. = substring-after(current(), '_')]/@val"/>

  <xsl:value-of select="concat('ATTITUDE_', $vAttitudes[@val = $vVal+1])"/>
 </xsl:template>

 <xsl:template match="*[floor(.) = .]/text()">
  <xsl:value-of select="concat(round(. div 5), '/10')"/>
 </xsl:template>
</xsl:stylesheet>

恼怒 的
谨慎的
高兴的
应用于提供的XML文档时:

<root>
    <data>
        <a>ATTITUDE_ANNOYED</a>
        <b>ATTITUDE_CAUTIOUS</b>
        <c>25</c>
        <d>30</d>
    </data>
</root>
<root>
   <data>
      <a>ATTITUDE_CAUTIOUS</a>
      <b>ATTITUDE_PLEASED</b>
      <c>5/10</c>
      <d>6/10</d>
   </data>
</root>

态度很恼火
态度谨慎
25
30
生成所需的正确结果:

<root>
    <data>
        <a>ATTITUDE_ANNOYED</a>
        <b>ATTITUDE_CAUTIOUS</b>
        <c>25</c>
        <d>30</d>
    </data>
</root>
<root>
   <data>
      <a>ATTITUDE_CAUTIOUS</a>
      <b>ATTITUDE_PLEASED</b>
      <c>5/10</c>
      <d>6/10</d>
   </data>
</root>

态度谨慎
态度高兴吗
5/10
6/10

一个您想要的XML输出的实际示例将非常有用。真的吗?我认为这个问题与输出是正交的。我当时一定不理解这个问题。我已经添加了一些关于输出的信息以及一些上下文。这有助于描述我的问题吗?哇,太棒了。“*[floor(.)=.]/text()”是一个非常厚颜无耻的笑话。我的真实生活文件包含了更多的值,所以我仍然需要解决一些问题,不过这对我来说是一个很好的起点!谢谢。@Quibblesome:不客气。是的,XPath是一种非常强大的选择语言——它与XSLT模板相结合,为我们提供了一种优秀的转换语言——更不用说XSLT 2.0/XPath 2.0了。