4

XPath 数据模型中的属性节点是什么?特定节点何时会成为属性节点?

如果有人可以提供属性节点的示例,那将非常有帮助。

4

3 回答 3

3

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"/>

因此,该属性被创建为没有任何父元素的独立项。然后,我们可以将它的一个实例复制到任何元素上

于 2013-03-03T17:31:18.810 回答
3

它是一个保存所有匹配属性的属性值的节点。例如,如果您有以下标签:

<tag name="foo">
    <child>Bar</child>
</tag>

那么 XPath 查询//@name将返回“foo”作为结果。如果有n 个具有该属性的标签,它将获取所有n 个属性的值。

属性节点本身由两部分组成——名称和值。因此,在上面的示例中,它将是name="foo"

于 2013-03-03T08:05:07.460 回答
1

在下面的 XML 中bar="baz"是一个带有名称bar和值的属性baz

<foo bar="baz"/>

一个属性不会“变成”一个属性;它要么是一个属性,要么不是。

要访问 XPath 中的属性,您可以使用@(这只是attribute::轴的快捷方式):

/foo/@bar

另请参阅这些链接以获取有关 XML 基础知识的更多信息。

于 2013-03-03T08:03:14.600 回答