XMLドキュメントの構造がわかっている場合は常に、//
XPath疑似演算子の使用を避けることをお勧めします。これを使用すると、大きな非効率(ドキュメントツリー全体のトラバース)が発生する可能性があります。
したがって、提供されたXMLドキュメントに対してこのXPath式をお勧めします。
/*/b[c]
これb
により、XMLドキュメントの最上位要素の子であり、。という名前の子要素を持つ要素が選択されc
ます。
更新:OPはほんの数分前に2番目の質問をしました:
2番目の質問は、2つの条件を組み合わせたいということです。名前が「b2」で要素がcの要素を取得したいのですが、この構文は機能しないようです。//b[@name='b2' and c]
提供されたXPath式は、必要な要素を正確に選択します。
XSLTベースの検証は次のとおりです。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:copy-of select="//b[@name='b2' and c]"/>
</xsl:template>
</xsl:stylesheet>
この変換が提供されたXMLドキュメントに適用される場合:
<a>
<b name = "b1"></b>
<b name = "b2"><c/></b>
<b name = "b3"></b>
</a>
XPath式が評価され、正しく選択された要素が出力にコピーされます。
<b name="b2">
<c/>
</b>