PHP的DOMDocument如何得到这个标记的内容?(PHP DOMDocument how to

2019-09-27 04:34发布

我使用的DOMDocument希望来解析这个小的HTML代码。 我在寻找一个特定的span与特定标签id

<span id="CPHCenter_lblOperandName">Hello world</span>

我的代码:

$dom = new domDocument;
@$dom->loadHTML($html); // the @ is to silence errors and misconfigures of HTML
$dom->preserveWhiteSpace = false;
$nodes = $dom->getElementsByTagName('//span[@id="CPHCenter_lblOperandName"');

foreach($nodes as $node){
    echo $node->nodeValue;
}

但出于某种原因,我觉得有什么不妥无论是代码或HTML(我怎么知道?):

  • 当我数与节点echo count($nodes); 结果总是1
  • 我得到的节点环路输出什么
  • 如何了解这些复杂的查询语法?
  • 我做错了什么?

Answer 1:

您可以使用简单的getElementById:

$dom->getElementById('CPHCenter_lblOperandName')->nodeValue

或者选择方式:

$selector = new DOMXPath($dom);

$list = $selector->query('/html/body//span[@id="CPHCenter_lblOperandName"]');

echo($list->item(0)->nodeValue);

//or 
foreach($list as $span) { 
    $text = $span->nodeValue;
}


Answer 2:

你的四层部分的问题得到三个部分答案:

  1. 的getElementsByTagName不采取XPath表达式,你需要给它一个标签名称;
  2. 没有什么是输出,因为没有标签将永远与您提供的标记名(参见#1);
  3. 它看起来像你想要的是XPath的,这意味着你需要创建一个XPath对象-看到了PHP文档更多;

另外,控制的libxml错误的更好的方法是使用libxml_use_internal_errors(真)(而不是“@”操作,这也将隐藏其他更合理的错误)。 这将使你的代码看起来是这样的:

<?php    
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach($xpath->query("//span[@id='CPHCenter_lblOperandName']") as $node) {
    echo $node->textContent;
}


文章来源: PHP DOMDocument how to get that content of this tag?