xslt在第二个循环中抓取错误的xml信息

时间:2012-09-14 17:49:39

标签: xml xslt xml-parsing

我正在使用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>

有什么想法吗?

2 个答案:

答案 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中更改它以输出所有值 - 这不一定是您想要的,但至少它可以清楚地表明出现了什么问题。