0

用例非常简单。我想通过基本上包含 HTML 文档的字符串(!)中的 xpath 语句查找节点并删除它们。

我知道如何使用 PHP 查找节点。基本上是这样的:创建新的 DOMDocument LoadHTML(或 LoadXML) 创建新的 DOMXpath 然后方法“查询”或“评估”。完毕。

然而,删除是棘手的部分。有人会认为您只需使用几条语句删除节点(最后是 parentNode->removechild),然后使用 saveHTML 将结果保存回字符串。不幸的是,这个操作几乎每次都会转换原始 HTML 字符串中的“太多东西”。

所以我现在的问题是。如何在不使用 saveHTML 或 saveXML 的情况下删除 xpath->query ($query) 返回的节点?并且无需编写我自己的解析器。

希望它足够清楚:-)

谢谢你看这个!

4

2 回答 2

0

首先,确保从底部和向上删除找到的节点。这是为了确保在父节点之前删除子节点。

第二,你所说的“转化为许多东西”是什么意思?PHP 的 DOM XML 会将文档解析为 DOM 节点树。然后你在树上工作,当你完成后,它会将 DOM 树转换回 XML/HTML。你很可能会失去缩进,参数可能会改变位置等等。重要的是文档的含义完全相同,即是 DOM 树的精确 XML/HTML 表示。

于 2010-06-19T07:49:53.313 回答
0

埃米尔感谢您的快速回答

是的你是对的。这就是我删除节点的方式并且它起作用了:

使用 loadHTML/loadXML 将 html STRING 转换为 DOM -> 使用 xpath 查询识别节点 -> 从 DOM 中删除节点(如您所述)-> 使用 saveHTML/XML 将 DOM 转换为 html STRING

这行得通 - 但是问题是 saveHTML 之后的输出通常有很大不同(除了已删除的节点)。我不关心论点定位或空白。但有时网站在 saveHTML 之后甚至无法在浏览器中正确呈现。我怀疑浏览器可以更好地处理不完美的 HTML 代码......

除了saveHTML,我还有其他方法可以尝试吗?

可能是不可能的(或者至少在没有大量努力的情况下是不可能的)?你怎么看?

于 2010-06-19T09:24:45.100 回答