【问题标题】:Non-destructive parsing and modifying of HTML elements in C++C++中HTML元素的非破坏性解析和修改
【发布时间】:2009-08-09 15:52:25
【问题描述】:

我需要在 C++ 中对 HTML 做一些简单的修改,最好不要完全重写 HTML,比如当我使用 libxml2 或 MSHTML 时会发生什么。

特别是我需要能够读取,然后(可能)修改所有“img”元素的“src”属性。我需要它足够健壮,以便能够使用任何有效的 HTML 来执行此操作,但最好不要在此过程中更改任何其他 HTML。

是否有任何库可以处理这个问题?或者这是我可以用正则表达式做的事情吗?我对正则表达式不太了解,我在这里读过很多问题,说你不应该使用它们来解析 HTML,但我不清楚这是否适用于这样的事情,或者该原则是否适用主要是在从 HTML 构建树的上下文中进行解析。

【问题讨论】:

  • 我不确定我是否理解您的限制。使用 DOM 并不会完全重写 HTML。
  • @EBGreen,libxml 添加一个 标记、一个 标记,并重新格式化所有 HTML。 MSHTML 将所有标记更改为大写,并重新格式化。而且由于有效的 HTML 仍然可以在浏览器中显示,因此将其分解为 DOM 通常会遗漏原始 HTML 中的内容。我想尽可能完整地保留原始 HTML,因为人们可能仍在我产品的另一端进行设计,如果他们看到的 HTML 看起来与他们尝试生成的内容大不相同,那可以是个问题。
  • 很抱歉应该说“因为无效的 HTML 仍然可以显示...”

标签: c++ html-parsing


【解决方案1】:

不建议将正则表达式用于 HTML,因为它们不能很好地处理嵌套标签。为此,它们应该没问题。

【讨论】:

  • 谢谢,这就是我从其他问题/答案中收集到的信息,但我并不积极。我想这可能是我最终学习正则表达式的一个很好的借口。
  • 我会推荐它。它们非常有用,而且学习曲线真的没有那么陡峭。
  • 大约 8 或 9 年前,我曾经在 Perl 中使用过正则表达式,但我几乎已经忘记了这一切。但我只是抓住了 Boost Regex,并且能够在大约一个小时内弄清楚如何做我需要做的事情,大约 10 行代码。我订购了几本关于这个主题的书,所以我实际上可以理解我所做的一切:P
【解决方案2】:

试试看HTMLTidy

我过去曾将它用于类似的事情。

【讨论】:

    猜你喜欢
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2011-10-28
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多