使用php domdocument xpath查询获取直接节点的nodevalue

时间:2014-02-13 07:58:17

标签: php xpath domdocument

我正在尝试获取直接节点值。例如

<font>..something not related to us......</font>
<font>..something not related to us......</font>
<font><br>Name : </font>
<font>foo</font>
<font>Company :</font>
<font>bar</font>
<font>..something not related to us......</font>
<font>..something not related to us......</font>

首先,我需要找到nodeValue Name。如果节点值是Name,那么我需要保存该名称的foo

如果nodeValue是公司,那么我需要公司的nodeValue bar

为此,我编写了这样的代码

$nodes = $xpath->query("//font");
foreach($nodes as $node){
            if($node->nodeValue = 'Name :')
                echo $node->nextSibling->nodeValue;
        }

请帮我搞定。我需要从当前的字体标签中找到下一个兄弟。

提前致谢!

这是我的完整代码 -

$content = "<font>..something not related to us......</font>
<font>..something not related to us......</font>
<font>Name : </font>
<font>foo</font>
<font>Company :</font>
<font>bar</font>
<font>..something not related to us......</font>
<font>..something not related to us......</font>";
$doc = new DOMDocument();
@$doc->loadHTML($content); 
$xpath = new DOMXPath($doc);
$nodes = $xpath->query("//font[.='Name :']/following-sibling::font[1]/text()");
print_r($nodes);
$name = $nodes[0]->nodeValue;

2 个答案:

答案 0 :(得分:0)

$nodes = $xpath->query("//font[.='Name : ']/following-sibling::font[1]/text()");
$name = $nodes->item(0)->nodeValue;

请参阅:http://www.w3.org/TR/xpath/#axes

答案 1 :(得分:0)

试试这个...... 我遇到了同样的问题.. 我找到了以下代码的解决方案。可能会对你有用。

foreach($nodes as $node){
    if($node->nodeValue = 'Name :'){
        $nextNode = $node->nextSibling;
        while($nextNode->nodeType == 3){
        $nextNode = $nextNode->nextSibling;
        }
        echo $nextNode->nodeValue;
    }
}

这里nodeType == 3是需要跳过的节点之间的某个空值。