假设我有以下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>
答案 0 :(得分:1)
关于 copy-of 的答案大致是这样的:@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"/>
因为现在@*
的连续实例之间没有冲突。
关于值的答案是在XSLT 1.0中:
<xsl:value-of select="$node-set"/>
将返回$ node-set中第一个节点的值。