我之前的问题[1]与此有关。我找到了答案。现在我想循环一个带有命名空间的可变长度数组。我的阵列:
<ns:array xmlns:ns="http://www.example.org">
<value>755</value>
<value>5861</value>
<value>4328</value>
<value>2157</value>
<value>1666</value>
</ns:array>
我的XSLT代码:(已在根目录中添加了命名空间)
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://www.example.org">
<xsl:template match="/">
<xsl:variable name="number" select="ns:array" />
<xsl:for-each select="$number">
<xsl:value-of select="$number" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
[1] https://stackoverflow.com/questions/20287219/looping-a-variable-length-array-in-xslt
答案 0 :(得分:0)
恕我直言,你通过引入一个名为number
的变量让你感到困惑,该变量实际上包含value
个标签的节点集。然后,结果你使用你的变量作为单项/节点,这不会产生所需的结果(假设你没有真正告诉我们你想对这些值做什么)。
另外,我认为你的问题与命名空间问题没有任何关系。您只需确保select
表达式中的命名空间与输入文件中的命名空间匹配。
我建议不要使用变量并更改检索当前值的方式:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns1="http://www.example.org">
<xsl:template match="/">
<xsl:for-each select="ns:array">
<!-- Inside here you can work with the `value` tag as the _current node_.
There are two most likely ways to do this. -->
<!-- a) Copy the whole tag to the output: -->
<xsl:copy-of select="." />
<!-- or b1) Copy the text part contained in the tag to the output: -->
<xsl:value-of select="." />
<!-- If you want to be on the safe side with respect to white space
you can also use this b2). This would handle the case that your output
is required not to have any white space in it but your imput XML has
some. -->
<xsl:value-of select="normalize-space(.)" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>