使用DOM解析HTML时保持文件偏移量?

时间:2010-11-11 14:15:54

标签: php dom html-parsing

我想修改格式不正确的HTML(WordPress帖子)中的<img src="">属性。我知道我可以采取简单的方法并使用正则表达式,但我担心people in blue furry suits will come haunt me in my sleep

如果我使用DOM解析器来读取HTML并修改<img>标签,我恐怕无法完全重建帖子(仅使用我的修改),因为DOM解析器将可能做了太多的清理工作,可能会删除基本数据。 SAX解析器可能无法处理无效的XML,因此这也不起作用。

那么,是否有中间路径,我可以使用DOM解析器,但是知道每个元素的起始位置,所以我可以从那里做字符串替换或类似的东西?我知道DOM树中的一些节点不会存在于源文档中(<b>Some <i>bizarre</b> formatting</i>可能会触发这个),但这是否意味着它总是不可能的?我看到PHP 5.3中添加了DOMNode::getLineNo() function,但我使用的是5.2.x。

1 个答案:

答案 0 :(得分:0)

如果PHP的DOM会写出“太干净”的结果,那么可以尝试基于字符串的SimpleHTMLDOM是否更宽松。

然而,由于格式化与您展示的一样奇怪,我永远不会完全信任解析器“正确”地执行它。但试试看,也许只是跳过这些东西。

DOM库的DOMNode类具有getLineNo()方法。我并不完全看到它是如何工作的,因为它没有提供偏移量。不确定这是否有助于您的使用案例。