【问题标题】:Keeping file offsets while parsing HTML with the DOM?在使用 DOM 解析 HTML 时保持文件偏移?
【发布时间】:2011-05-08 12:03:28
【问题描述】:

我想修改格式不太错误的 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。

【问题讨论】:

    标签: php dom html-parsing


    【解决方案1】:

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

    但是,由于格式如您所展示的那样奇怪,我永远不会完全相信解析器会“正确”地做到这一点。但是试试看,也许它只是跳过了这些东西。

    DOM 库的 DOMNode 类有一个 getLineNo() 方法。不过,我并不完全了解它是如何工作的,因为它没有提供与之相匹配的偏移量。不确定这是否会对您的用例有所帮助。

    【讨论】:

    • 我的格式化示例是理论上的,为什么这不适用于所有 DOM 节点。我相信 WordPress 编辑器会清理它,所以我不必处理这种情况。 DOMNode::getLineNo() 函数可能有助于缩小最终字符串替换的范围,但由于我使用的是 PHP 5.2,因此我无法使用它。
    猜你喜欢
    • 1970-01-01
    • 2015-01-22
    • 2013-02-15
    • 2013-06-08
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多