1

次のtest.htmlで、xpathクエリを使用して「テスト」を1回だけ取得したい

<html>
    <body>
        <div class="test1"></div>
        <div class="test2">
            <div><strong>Testing</strong></div>
        </div>
    </body>
</html>

コンテンツを取得するために使用したphpコードを次に示します。

$uri='test.html';
$doc = new DOMDocument('1.0','utf-8');
$doc->loadHTMLFile($uri);
$xpath= new DOMXPath($doc);
$path="/html/body/div[2]//*"; 
$elements = $xpath->query($path);

if(!is_null($elements)){
    foreach($elements as $element){
        echo '<br>['.$element->nodeName.']';
        $nodes = $element->childNodes;
        foreach($nodes as $node){
            $nodeValue=$node->nodeValue;
            echo $nodeValue;
        }
    }
}

これが私が得た結果です。

[div] Testing 
[strong] Testing

[div] ノードでも "Testing" と出力されるのはなぜですか? [strong]ノードにある場合にのみ「テスト」を取得したい。

4

2 に答える 2

0

XPathは、子ノードと孫ノードを含む/html/body/div[2]//*すべての子孫を返します。div[2]

孫の使用のみを取得するには/html/body/div[2]/*/*

于 2013-08-18T03:07:47.993 に答える
0

それがまさにその仕組みnodeValueです - 親ノードには常にnodeValueその子の s が含まれます。

nodeValueあなたの目標に完全には適合しません。代わりに、その子の間でテキスト ノードを取得する必要があります。この質問を参照してください: PHP DOM でノードのテキストを取得する

于 2013-08-17T03:06:04.727 に答える