gpt4 book ai didi

PHP DOMXPath 正在剥离匹配文本中的我的标签

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:07:14 25 4
gpt4 key购买 nike

我昨天问了这个问题,当时这正是我所需要的,但是在处理一些实时数据时我发现它并没有完全按照我的预期进行。 Parse HTML with PHP's HTML DOMDocument

它从 HTML 页面获取数据,但随后它还会去除捕获的文本 block 内的所有 HTML 标记,这不是我想要的。 (我可能不想去掉一些标签,但不是全部,这可以稍后完成)

最佳答案

这是 DOM 的一个常见问题:如果您想获取标签的内容及其所有子标签的内容,您必须做更多的工作。

基本上,您必须遍历与 XPath 查询匹配的节点的子节点,以获取它们的内容。

用户在 DOMElement class 的手册页上注释中提出了一个解决方案。 -- 参见 this note .


将此解决方案集成到您已有的代码中,您应该会得到类似这样的带有子标记的 HTML 字符串声明:

$html = <<<HTML
<div class="main">
<div class="text">
<p>
Capture this <strong>text</strong> <em>1</em>
</p>
<p>
And some other <strong>text</strong>
</p>
</div>
</div>
HTML;


而且,要从该 HTML 字符串中提取数据,您可以使用类似的东西:

$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);

$tags = $xpath->query('//div[@class="main"]/div[@class="text"]');
foreach ($tags as $tag) {
$innerHTML = '';

// see http://fr.php.net/manual/en/class.domelement.php#86803
$children = $tag->childNodes;
foreach ($children as $child) {
$tmp_doc = new DOMDocument();
$tmp_doc->appendChild($tmp_doc->importNode($child,true));
$innerHTML .= $tmp_doc->saveHTML();
}

var_dump(trim($innerHTML));
}

唯一改变的是 foreach 的内容循环:而不是仅仅使用 $tag->nodeValue ,您必须遍历子元素。


这给了我以下输出:

string '<p>
Capture this <strong>text</strong> <em>1</em>
</p>


<p>
And some other <strong>text</strong>
</p>' (length=150)

这是<div>的全部内容匹配的标签及其所有子标签 - 包括标签。


注意:手册的用户注释中经常有有趣的想法和解决方案;-)

关于PHP DOMXPath 正在剥离匹配文本中的我的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2574625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com