【发布时间】:2011-10-24 11:45:55
【问题描述】:
我正在寻找这个功能:
给出的是这个 html 页面:
<body>
<h1>Hello,
<b>world!</b>
</h1>
</body>
我想得到一个只包含 DISTINCT 文本元素的数组 (没有重复)和围绕文本元素的标签数组:
上述“html”的结果将是一个如下所示的数组:
array =>
"Hello," surrounded by => "h1" and "body"
"world!" surrounded by => "b", "h1" and "body"
我已经这样做了:
$res=$xpath->query("//body//*/text()");
这给了我不同的文本内容,但省略了 html 标记。
当我这样做时:
$res=$xpath->query("//body//*");
我得到重复的文本,每个标签星座一个:例如:“世界!”会出现3次, “body”一次,“h1”一次,“b”一次,但我似乎无法 获取哪些文本实际上是重复的信息。只是检查重复的文本是 还不够,因为重复的文本有时只是以前文本或网站的子字符串 可能包含真正的重复文本,然后将其丢弃,这是错误的。
我该如何解决这个问题?
非常感谢!!
托马斯
【问题讨论】:
-
我认为您需要 xquery。无论如何,在 HTML 上使用 XML 技术并不好。 html 可能格式不正确,因此会出现解析错误。
-
@AurelioDeRosa DOM 可以解析损坏的 HTML
-
您尚未接受答案。您能否澄清您在答案中寻找的内容以及为什么给定的答案不让您满意。
标签: php html parsing tags domdocument