3

私は XPath を使用しています。これが私のクエリです。

$elements = $xpath->query('//div/div/div/div/div/div[@id="con1"]/table/tr/td');

そして、すべてがうまくいきます。

次に、 の条件を変更するdivと、クエリは次のようになります。

$elements = $xpath->query('//div/div/div/div/div/div[@id="con2"]/table/tr/td');

そして、私は見なければならないものを見ます。

しかし、後で、これを行うと:

$elements = $xpath->query('//div/div/div/div/div/div[@id="con1" or @id="con2"]/table/tr/td');

の要素だけが再び表示されcon1ます。何故ですか?

完全なコードは以下のとおりです。

$elements = $xpath->query('//div/div/div/div/div/div[@id="con1" or @id="con2"]/table/tr/td');
foreach ( $elements as $element ) {
    $str1=$element->getAttribute('class');
    $str2="first-td";
    $str3="status";
    if (strcmp($str1,$str2)==0) {
        var_dump( $element->nodeValue);
    }
    if (strcmp($str1,$str3)==0) {
        echo $element->childNodes->item(0)->getAttribute('class'). "<br />"; 
    }
}

要約すると、条件が のみの場合con1、正しい結果が表示されます。のみの場合con2、正しい結果が表示されます。を使用しているときに問題が発生しorます。その場合、 からの結果のみが表示されcon1ます。最初の条件を満たして止まる感じです。それらは DOM ツリーの同じレベルにあります。

4

1 に答える 1

0

あなたがやろうとしているのは、同じ式で<div id="con1">andを取得<div id="con2">することですが、実際に行っているのは、属性id="con1"またはid="con2"を持つdivを取得することです。条件の最初の式は true を返し、ノードを取得します。それは理にかなっている。<div id="con1">

両方のノードを取得するには、次のようなものが必要です。

//div[@id="con1"]|//div[@id="con2"

注:はツリー内の//div[@id="con1"]任意のノードを検索し、ドキュメント内の は一意である必要があります。すべてのパスを指定する必要はありません。<div id="con1">id

于 2012-12-21T08:27:27.943 に答える