第一个问题:有没有办法获得节点属性的名称?
<node attribute1="value1" attribute2="value2" />
Run Code Online (Sandbox Code Playgroud)
第二个问题:有没有办法将属性和值作为价值对?情况如下:
<node attribute1="10" attribute2="0" />
Run Code Online (Sandbox Code Playgroud)
我想得到值> 0的所有属性,这样:"attribute1 = 10".
Dim*_*hev 12
第一个问题:有没有办法获得节点属性的名称?
<node attribute1="value1" attribute2="value2" />
是:此XPath表达式(何时node是上下文(当前)节点)):
name(@*[1])
生成第一个属性的名称(排序可能依赖于实现)
和这个XPath表达式(何时node是上下文(当前)节点)):
name(@*[2])
生成第二个属性的名称(排序可能依赖于实现).
第二个问题:有没有办法将属性和值作为价值对?情况如下:
<node attribute1="10" attribute2="0" />我想得到值> 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>
Run Code Online (Sandbox Code Playgroud)
应用于此XML文档时:
<node attribute1="10" attribute2="0" />
Run Code Online (Sandbox Code Playgroud)
产生完全相同的结果:
attribute1=10
| 归档时间: |
|
| 查看次数: |
21217 次 |
| 最近记录: |