XPathデータモデルの属性ノードとは何ですか?特定のノードが属性ノードになるのはいつですか?
誰かが属性ノードの例を提供できれば、それは非常に役立ちます。
これは、一致したすべての属性の属性値を保持するノードです。たとえば、次のタグがある場合:
<tag name="foo">
<child>Bar</child>
</tag>
その場合、XPathクエリ//@name
は結果として「foo」を返します。その属性を持つタグがn個ある場合、 n個の属性の値すべてをフェッチします。
属性ノード自体は、名前と値の2つの部分で構成されています。したがって、上記の例では、になりますname="foo"
。
OPはコメントで、彼の質問は次のとおりであることを明確にしています。
親要素なしで属性ノードを作成することは可能ですか?
はい、XSLT2.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"/>
したがって、属性は、親要素を持たないスタンドアロンアイテムとして作成されます。次に、そのインスタンスを任意の要素にコピーできます。
以下のXMLにbar="baz"
は、名前bar
と値を持つ属性がありますbaz
。
<foo bar="baz"/>
属性は属性に「なりません」。それは属性かどうかのどちらかです。
XPathの属性にアクセスするには、次を使用できます@
(これはattribute::
軸のショートカットです)。
/foo/@bar
XMLの基本についてもう少し詳しくは、これらのリンクも参照してください。