web-dev-qa-db-ja.com

属性値で要素を選択するためのXPath

私は以下のXMLを持っています。

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
    <Employee id="3">
        <age>40</age>
        <name>Tom</name>
        <gender>Male</gender>
        <role>Manager</role>
    </Employee>
    <Employee id="4">
        <age>25</age>
        <name>Meghna</name>
        <gender>Female</gender>
        <role>Manager</role>
    </Employee>
</Employees>

Id = "4"のEmployee要素を選択したいです。

私は何も返していないXPath式の下で使用しています。

//Employee/[@id='4']/text()

私は http://chris.photobooks.com/xml/default.htm でそれをチェックしました、そしてそれは無効なxpathを言います、問題がどこにあるかわからない。

168
Pankaj

/の前に[を削除する必要があります。述語([]の部分)の直前にスラッシュを入れないでください。また、Employee要素自体を選択するには、最後に/text()を付けないようにするか、そうでなければEmployee要素のすぐ下にある空白のテキスト値を選択します。

//Employee[@id='4']

編集:Jensがコメントで指摘しているように、//はドキュメント全体で一致するノードを検索するので非常に遅くなります。作業中の文書の構造が一貫している場合は、フルパスを使用することをお勧めします。次に例を示します。

/Employees/Employee[@id='4']
245
JLRishe

これをやってみてください。

/Employees/Employee[@id=4]/*/text()
10
Gilles Quenot

続いて、次のように「特定の属性を持つすべてのノード」を選択できます。

//*[@id='4']

3
rogerdpack