18

私が使用しているXMLコードは次のとおりです。

<inventory>
    <drink>
        <lemonade supplier="mother" id="1">
            <price>$2.50</price>
            <amount>20</amount>
        </lemonade>
        <lemonade supplier="mike" id="4">
            <price>$3.00</price>
            <amount>20</amount>
        </lemonade>
        <pop supplier="store" id="2">
            <price>$1.50</price>
            <amount>10</amount>
        </pop>
    </drink>
</inventory>

次に、XPathの操作を練習するための簡単なコードを作成しました。

<?php
    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml');

    $xpathvar = new Domxpath($xmldoc);

    $queryResult = $xpathvar->query('//lemonade/price');
    foreach($queryResult as $result) {
        echo $result->textContent;
    }
?>

そのコードはうまく機能しており、期待どおりにすべてのレモネード価格値を出力します。ここで、クエリ文字列を変更して、属性が特定の値に設定されている要素のみを選択すると、次のようになります。

//レモネード[supplier="mother"] / price

また

// lemonade [id = "1"] / price

動作せず、出力もまったくありません。私は何が間違っているのですか?

4

3 に答える 3

34

これを試して:

//lemonade[@id="1"]/price

また

//lemonade[@supplier="mother"]/price

「@」がないと、属性ではなくその名前の子要素が検索されます。

于 2008-10-23T17:21:47.330 に答える
8

これは接線方向にのみ関連していますが、構造がわかっているドキュメントでXPathを使用する場合は、「//some-element-name」を使用しないでください。簡単な例としては非常に便利ですが、そのクエリで巨大なxmlファイルをヒットすると、特にその後に複雑なものが続く場合は、パフォーマンスの問題がすぐに発生します。

在庫/飲み物/レモネード[@supplier="mother"]/価格

于 2009-01-11T12:33:32.453 に答える
7

@ 記号を使用して述語内の属性を示す必要があります so: //lemonade[@supplier="mother"]/price、それだけです。

于 2008-10-23T17:23:10.493 に答える