第一个问题:有什么办法吗
获取节点属性的名称?
<node attribute1="value1"
attribute2="value2" />
是的:
这个 XPath 表达式 (when node
是上下文(当前)节点)):
name(@*[1])
产生第一个属性的名称(顺序可能与实现相关)
和这个 XPath 表达式 (when node
是上下文(当前)节点)):
name(@*[2])
产生第二个属性的名称(顺序可能与实现相关)。
第二个问题:有没有办法获得
属性和值作为值对?
情况如下:
<node attribute1="10" attribute2="0"
/>
我想获取所有属性
value>0 这样:“attribute1=10”。
这个 XPath 表达式(当属性名为“attribute1
“是上下文(当前)节点)):
concat(name(), '=', .)
产生字符串:
attribute1=value1
和这个 XPath 表达式(当节点node
是上下文(当前)节点)):
@*[. > 0]
选择上下文节点的所有属性,其值为数字,大于0。
在 XPath 2.0 中,可以将它们组合在一个 XPath 表达式中:
@*[number(.) > 0]/concat(name(.),'=',.)
得到(在这种特殊情况下)这个结果:
attribute1=10
如果您使用的是 XPath 1.0,这是不太强大的,你会需要将 XPath 表达式嵌入到托管语言中,例如 XSLT。以下 XSLT 1.0 转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:for-each select="@*[number(.) > 0]">
<xsl:value-of select="concat(name(.),'=',.)"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
当应用于此 XML 文档时:
<node attribute1="10" attribute2="0" />
产生完全相同的结果:
attribute1=10