1

假设我有以下 xml 结构,

<foos>
    <bar id="0001"></bar>
    <bar id="0002"></bar>
    <bar id="0003"></bar>
    <bar id="0004"></bar>
</foos>

为什么下面的 xpath 只返回最后一个 id?为什么不是所有的 id 属性?默认情况下 XPath 是否具有不同的功能?

然后如果我用 value-of 更改 copy-of,它会返回第一个 id 实例的值?这个排序如何重新 LIFO 用于复制和 FIFO 用于发生价值?

<xsl:output method="xml"/>
<xsl:template match="/">
    <info>
        <xsl:copy-of select="//bar/@*"/>
    </info>
</xsl:template>
4

1 回答 1

1

关于复制的答案大致是这样的:@id 的第一个实例创建了一个名为的属性id,其值为0001. 第二个实例用 的值覆盖此属性0002,依此类推。

如果,OTOH,您会将此 XML 作为输入:

<foos>
    <bar id="0001"></bar>
    <bar ie="0002"></bar>
    <bar if="0003"></bar>
    <bar ig="0004"></bar>
</foos>

然后:

<info>
    <xsl:copy-of select="//bar/@*"/>
</info>

会返回:

<info id="0001" ie="0002" if="0003" ig="0004"/>

因为现在 . 的连续实例之间没有冲突@*


关于value-of的答案是在 XSLT 1.0 中:

<xsl:value-of select="$node-set"/>

将返回 $node-set 中第一个节点的值。

于 2014-03-25T23:33:32.947 回答