DOM挑战 - >获取不在任何元素中的文本

时间:2012-05-17 14:01:08

标签: php dom html-parsing

这里我如何得到我的dom树:

$html = file_get_contents('somefile.html');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$dom_document = new DomXPath($dom);
$dom_object = $dom_document->query('somePathHere');

$ dom_object的html结构:

<div>
  <a href='something'>some text here</a>
  I want this
</div>

这就是我需要的:

foreach($dom_object as $value){
     echo $value->getElementsByTagName('a')->item(0)->nodeValue; //working properly
     echo 'I want this' // I don't know how to get that 'I want this' text
}

精度:我想避免必须进行多个xpath查询。我想坚持我的...提前谢谢你。干杯。马克

2 个答案:

答案 0 :(得分:0)

使用nodeType获取文本节点:

foreach($nodes as $node) {
    if($node -> nodeType == 3) {
        echo $node -> nodeValue . "<br />";
    }
}

说明:在php DOMDocument中,任何文本都在节点内。在您的情况下,它是一个文本节点,根据PHP的XML_NODE_CONSTANTS

表示3

详细信息:http://www.php.net/manual/en/class.domnode.php

答案 1 :(得分:0)

我不知道xml的预期结构,但这适用于您的特定请求:

/html/body/div/text()

这将仅选择具有div的直接父级的文本节点。您也可以使用常规//div/text(),但更具体的查询通常更好/更快。