2009-08-09 36 views
1

我需要对C++中的HTML做一些简单的修改,最好不用完全重写HTML,比如当我使用libxml2或MSHTML时会发生什么。非破坏性地解析和修改C++中的HTML元素

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

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

+0

我不确定我是否理解你的约束。使用DOM不会完全重写HTML。 – EBGreen 2009-08-09 16:01:28

+1

@EBGreen,libxml添加标记,标记,并重新格式化所有HTML。 MSHTML将所有标签更改为大写,并将其全部重新格式化。由于有效的HTML仍然可以在浏览器中显示,因此将其分解为DOM通常会留下原始HTML中的内容。我想尽可能保留原始的HTML,因为人们可能仍然在我的产品的另一端进行设计,如果他们看到的HTML与他们试图制作的HTML看起来有很大的不同,那可以成为一个问题。 – Gerald 2009-08-09 16:08:50

+0

对不起,应该说“因为无效的HTML仍然可以显示......” – Gerald 2009-08-09 16:09:23

回答

2

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

+0

谢谢,这是关于我从其他问题/答案中收集的内容,但我并不积极。我想这可能是我终于学习正则表达式的一个很好的借口。 – Gerald 2009-08-09 16:37:03

+0

我推荐它。它们非常有用,学习曲线实际上并不那么陡峭。 – 2009-08-09 18:04:25

+0

我在8或9年前曾经在Perl中使用过正则表达式,但我几乎忘记了这一切。但是我只是抓住了Boost Regex,并且能够弄清楚如何在大约一个小时内完成我需要做的事情,大约有10行代码。我就这个主题下了几本书,所以我可以真正理解我所做的一切:P – Gerald 2009-08-09 21:56:34

1

尝试寻找在HTMLTidy

我已经用它在过去类似的事情。

+0

谢谢,我会给你一个旋转。 – Gerald 2009-08-09 16:19:10