我正在使用xslt将xml转换为不同的xml。我用:
<xsl:template match="header">
<header>
<order><xsl:value-of select="@order"/></order>
<value><xsl:value-of select="../header"/></value>
</header>
</xsl:template>
获取标题中的信息。
原始头文件:
<header order="1">blah11111</header>
<header order="2">blah22222</header>
当我申请模板时,我从中得到了什么:
<header>
<order>1</order>
<value>blah11111</value>
</header>
<header>
<order>2</order>
<value>blah11111</value>
</header>
我想要的是什么:
<header>
<order>1</order>
<value>blah11111</value>
</header>
<header>
<order>2</order>
<value>blah22222</value>
</header>
有什么想法吗?
答案 0 :(得分:1)
第二个select
元素上的xsl:value-of
正在爬上父级,然后再次降序以获取所有header
元素; xsl:value-of
然后忽略除了第一个之外的所有内容。
如果您想要的不是第一个header
的值,而是您当前正在处理的标头的值,则您的select
属性说错了。试试
<value><xsl:value-of select="."/></value>
答案 1 :(得分:1)
在XSLT 1.0中,当xsl:value-of选择多个节点时,它会输出第一个节点的值并忽略所有其他节点。这种行为非常容易出错,因此在XSLT 2.0中更改它以输出所有值 - 这不一定是您想要的,但至少它可以清楚地表明出现了什么问题。