2009-08-09 71 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