【发布时间】:2015-02-05 16:48:58
【问题描述】:
我需要比较表示整数的 XML 属性,但可以使用 XPath/XSLT-1.0 以十进制或十六进制(带有 0x 前缀)给出。
这是一个(不工作的)XSLT 来演示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1" omit-xml-declaration="yes" />
<xsl:template match="//node">
<xsl:if test="@value > 2">
<xsl:value-of select="@value"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
这是要输入的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<body>
<node value="1"/>
<node value="3"/>
<node value="0x03"/>
</body>
这是所需的输出。格式不重要;重要的只是在第二个和第三个节点上有一个匹配:
3 0x03
第二个节点上只有一个匹配; XML 不会将十六进制节点解释为数字。谁能想到这个问题的合理解决方案?
【问题讨论】:
-
您使用的 XSLT 处理器是什么?这不能在 XSLT 1.0 中一步完成。您必须使用 converted numbers 和 that 创建一个中间结果(结果树片段) - 在
node-set()扩展功能的帮助下 - 您可以按照您想要的方式选择节点(//node[@value &gt; 2])。由于node-set()并非随处可用,因此取决于您的 XSLT 处理器版本。 -
@Tomalak 为什么你认为有必要有一个节点集?