首页 文章

如何从包含带有PHP的HTML文档的字符串中删除使用xpath-> query查找的节点

提问于
浏览 700
0

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

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

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

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

希望它足够清楚:-)

谢谢你看这个!

2 回答

  • 0

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

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

  • 0

    埃米尔谢谢你的快速回答

    是的,你是对的 . 这是我删除节点的方式,它起作用:

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

    这是有效的 - 但问题是saveHTML之后的输出通常明显不同(除了已删除的节点) . 我不关心参数定位或空格 . 但有时在saveHTML之后,网站甚至无法在浏览器中正确呈现 . 我怀疑浏览器与不完美的HTML代码处理得更好......

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

    可能是不可能的(或者至少没有很大的努力)?你怎么看?

相关问题