XPath 数据模型中的属性节点是什么?特定节点何时会成为属性节点?
如果有人可以提供属性节点的示例,那将非常有帮助。
OP在评论中澄清说他的问题是:
是否可以在没有任何父元素的情况下创建属性节点?
是的,在 XSLT 2.0 中可以这样写:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vAttr" as="attribute()">
<xsl:attribute name="x">y</xsl:attribute>
</xsl:variable>
<xsl:template match="/*">
<xsl:copy>
<xsl:copy-of select="$vAttr"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当此转换应用于以下 XML 文档时:
<t/>
产生了想要的正确结果:
<t x="y"/>
因此,该属性被创建为没有任何父元素的独立项。然后,我们可以将它的一个实例复制到任何元素上。
它是一个保存所有匹配属性的属性值的节点。例如,如果您有以下标签:
<tag name="foo">
<child>Bar</child>
</tag>
那么 XPath 查询//@name
将返回“foo”作为结果。如果有n 个具有该属性的标签,它将获取所有n 个属性的值。
属性节点本身由两部分组成——名称和值。因此,在上面的示例中,它将是name="foo"
。
在下面的 XML 中bar="baz"
是一个带有名称bar
和值的属性baz
:
<foo bar="baz"/>
一个属性不会“变成”一个属性;它要么是一个属性,要么不是。
要访问 XPath 中的属性,您可以使用@
(这只是attribute::
轴的快捷方式):
/foo/@bar
另请参阅这些链接以获取有关 XML 基础知识的更多信息。