gpt4 book ai didi

php - PHP 中的 XPath : Get all text nodes, 导航除外

转载 作者:搜寻专家 更新时间:2023-10-31 20:43:19 25 4
gpt4 key购买 nike

我正在为一些非常糟糕的 HTML 编写自定义解析器/数据提取器。

改变 HTML 是不可能的。

我不会向您详细说明我必须跳过的障碍,但我现在已经非常接近我最初的目标了。我结合使用 DOMDocument getElementByName、正则表达式替换(我知道,我知道...)和 XPath 查询。

我需要从文档正文中取出所有文本。我希望导航仍然是一个单独的实体,至少在抽象上如此。这是我现在正在做的事情:

$contentnodes = $xpath->query("//body//*[not(self::a)]/text()|//body//ul/li/a");

foreach ($contentnodes as $contentnode) {
$type = $contentnode->nodeName;
$content = $contentnode->nodeValue;

$output[] = array( $type, $content);
}

这是可行的,除了它当然会以不同方式处理页面上的所有链接,我只希望它对导航这样做。

我可以使用什么 XPath 语法,以便在该查询的第一部分,在 | 之前,我告诉它获取 body 的所有文本节点' s child except ul > li > a

请注意,我不能依赖 p 标签或 h1 标签或任何类似的合理内容来对内容进行有根据的猜测。

谢谢

更新:@hr_117 下面的回答有效。我还发现您可以像这样使用多个 not 语句:

//body//text()[not(parent::a/parent::li/parent::ul)][not(parent::h1)]

最佳答案

你可以尝试这样的事情:

//body//text()[not(parent::a/parent::li/parent::ul)]|//body//ul/li/a

关于php - PHP 中的 XPath : Get all text nodes, 导航除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17197646/

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