56

以下の例で子要素cを持つすべての要素bを見つけるのを手伝っていただけませんか。

<a>
    <b name = "b1"></b>
    <b name = "b2"><c/></b>
    <b name = "b3"></b>
</a>

xpathクエリはb2要素を返す必要があります

2番目の質問は、2つの条件を組み合わせたいということです。name= "b2"で、要素cを持つ要素を取得したいのですが、この構文は機能しないようです:// b [@ name ='b2' and c]

4

2 に答える 2

66

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>
于 2012-06-04T12:42:24.497 に答える
26

それは同じくらい単純でなければなりません

//b[c]

つまり、子供bがいる場所を見つけます。c

于 2012-06-04T12:30:02.047 に答える