1

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

有什么想法吗?

4

2 回答 2

1

在 XSLT 1.0 中,当 xsl:value-of 选择多个节点时,它会输出第一个节点的值并忽略所有其他节点。这种行为很容易出错,因此在 XSLT 2.0 中将其更改为输出所有值 - 这不一定是您想要的,但至少它可以清楚地说明出了什么问题。

于 2012-09-14T21:30:12.930 回答
1

第二selectxsl:value-of元素上的 是爬到父元素,然后再次下降以获取所有header元素;xsl:value-of然后忽略除第一个之外的所有内容。

如果您想要的不是第一个header的值,而是您当前正在处理的标头的值,那么您的select属性说错了。尝试

<value><xsl:value-of select="."/></value>
于 2012-09-14T17:55:46.450 回答