【发布时间】:2020-04-09 10:47:20
【问题描述】:
使用 PHP 我想将 HTML 文档拆分成单独的单词,但将某些 <span>s 放在一起。到目前为止,这与我所获得的最接近,只有一个 HTML 的最小示例(实际上会更大更复杂):
$html = '<html><body>
<h1>My header</h1>
<p>A test <b>paragraph</b> with <span itemscope itemtype="http://schema.org/Person">Bob Ferris</span> a person.</p>
</body></html>';
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
foreach($xpath->query('.//span[@itemtype]|.//text()[normalize-space()]') as $node) {
echo $node->nodeType . " " . $node->nodeValue . "<br>";
}
这个输出:
3 我的标题
3个测试
3段
3 与
1 鲍勃·费里斯
3 鲍勃·费里斯
3个人。
(nodeType3是文本节点,1是元素)
我还需要:
- 将文本节点拆分为单个单词并去除标点符号(在此阶段很容易完成,但可以在 xpath 查询中完成吗?)
- 仅捕获“Bob Ferris”元素,而不捕获“Bob Ferris”文本节点。
- 我也需要使用
$node->getAttribute()访问这些<span>s 的属性
【问题讨论】:
-
我猜不是
.//text()我想说“所有不在span[@itemtype]内的文本节点”...?