Xslt 在转换之前是否有一种干法转换值?
假设我有以下xmlXslt 在转换之前是否有一种干法转换值?,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格式。这些价值观中
<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了。