【问题标题】:Get the nodevalue of the immediate node using php domdocument xpath query使用php domdocument xpath查询获取直接节点的nodevalue
【发布时间】:2014-02-13 07:58:17
【问题描述】:

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

<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 是 Company,那么我需要 Company 的 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;

【问题讨论】:

    标签: php xpath domdocument


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

    见:http://www.w3.org/TR/xpath/#axes

    【讨论】:

    • 作为下一步,我尝试这样获取下一个节点值foreach($nodes as $node){ echo $node-&gt;nodeValue; } 对我不起作用。帮助我如何获得价值foo
    • 得到一个错误:Fatal error: Cannot use object of type DOMNodeList as array 如果我 print_r($nodes);,我得到DOMNodeList Object ( [length] =&gt; 0 )
    • 我已经在问题中添加了完整的代码。请检查一次。
    • 我的错,我更正了我的答案。注意字体元素文本内容中的空格; xpath 表达式的谓词 [.='Name : '] 中的字符串必须与 XML 文档中的字符串完全相同。
    【解决方案2】:

    试试这个... 我遇到了同样的问题.. 我找到了以下代码的解决方案。也许它会为你工作。

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-28
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2018-08-02
      • 2015-05-08
      • 1970-01-01
      相关资源
      最近更新 更多