我具有以下html结构:
<a>
<div>
<div>
<span>
text node 1<br>
text node 2 <!--//comments-->
</span>
</div>
</div>
</a>
通过以下查询,我得到了第二个节点,但是如何使该节点不包括注释?
$spanx = $xpath->query('//a/div/div/span/text()[2]');
$span = $spanx->item($l)->nodeValue;
echo "<td>".$span."</td></tr>";
我有那个结果:
text node 2 //comments
我搜索:
text node 2
答案 0 :(得分:3)
我已经在本地主机上测试了以下内容。我创建了名为DOM_with_comment.html
的文件,其中包含:
<a>
<div>
<div>
<span>
text node 1<br>
text node 2 <!--//comments-->
</span>
</div>
</div>
</a>
当我跑步时:
<?php
$doc = new DOMDocument;
libxml_use_internal_errors(true);
$doc->preserveWhiteSpace = false;
$doc->loadHTMLFile('DOM_with_comment.html');
$xpath = new DOMXPath($doc);
echo "<pre>";
foreach ($xpath->query('//a/div/div/span/text()') as $item) {
var_dump($item->nodeValue);
}
输出为:
string(29) "
text node 1"
string(31) "
text node 2 "
string(14) "
"
因此,通过从xpath查询访问第一个合格结果[0]
,然后显示trim()
的{{1}}和->nodeValue()
,可以看出没有注释或空白在目标子字符串的两侧。
var_export()
p.s。如果您的输入不是来自文件而是变量,则其工作方式相同:
var_export(trim($xpath->query('//a/div/div/span/text()[2]')[0]->nodeValue));
// outputs: 'text node 2'