我正在使用DOMXPath来查询HTML文档中的节点,我想要提取哪些内容。
我有以下HTML文档:
<p class="data">
Immediate Text
<br>
Text In Second Line
<br>
E-Mail:
<script>Some Script Tag</script>
<a href="#">
<script>Another Script Tag</script>
Some Link In Third Line
</a>
<br>
Text In Last Line
</p>
我希望收到以下结果:
立即文本\ r \ n文本在第二行\ r \ nE-Mail:第三行中的某些链接\ r \ n文本在最后一行
到目前为止,我有以下PHP代码:
#...
libxml_use_internal_errors(true);
$dom = new \DOMDocument();
if(!$dom->loadHTML($html)) {
#...
}
$xpath = \DOMXPath($dom);
$result = $xpath->query("(//p[@class='data'])[1]/text()[not(parent::script)]");
问题:
答案 0 :(得分:0)
通过在/
中使用子轴/text()
,您将只获得当前节点上下文的直接子节点。要获取所有后代,请改为使用后代轴(//
)。
要同时获取文本节点和<br>
,您可以尝试使用//nodes()
轴并进一步按节点的类型进行过滤 - 以获取文本节点类型的节点 - 或 name - 获取名为br
的元素 - :
(//p[@class='data'])[1]//nodes()[self::text() or self:br][not(parent::script)]