2013-08-21 47 views
1

我有一個我想用NSXMLParser解析的XML文檔。它可以包含的標籤之一是<html>,在我的解析表示中,我希望逐字逐句地標記該標籤的內容。然而,當我解析文檔時,我們的代理方法被調用了html標籤內每個標籤的開始,結束和內容。我可以使用NSXMLParser保留一些未解析的部分嗎?

我無法獲得文檔的提供者添加CDATA標籤;我也不能使用NSXMLParser以外的其他語言來解析文檔。

有沒有辦法讓我告訴解析器把HTML標籤的內容當作CDATA處理,並且讓它們不解析,即使它們包含其他標籤?

+1

這可能不是有效的,只是一個建議。爲什麼不在'NSXMLParser'之前自己添加CDATA?將數據轉換爲字符串,進行必要的修改,轉換回數據並將其傳遞給解析器。 – Amar

回答

1

這太糟糕了,XML提要的所有者將無法修復它,因爲根據HTML,最終可能會得到格式不正確的XML提要。如果它確實是一個XML文檔,他們肯定應該將其包裝在CDATA中,或者將所有<替換爲&lt;,並將所有>替換爲&gt;。坦率地說,如果你所需要的只是HTML,並且你擁有的只是包含HTML但沒有CDATA或適當的字符替換的XML標記,我可能不會傾向於嘗試通過NSXMLParser來運行它(因爲成功的解析取決於HTML的性質)。我將使用NSScannerNSRegularExpression來提取包裝HTML的XML的開始和結束標記之間的所有文本。或者,如果您真的想使用NSXMLParser(因爲除了您需要的HTML之外還有其他內容),請手動修改NSData,然後自行將HTML包裝到CDATA中。

另一方面,如果您試圖解析的文檔確實不是XML,而只是HTML,那麼您當然不應該使用XML解析器解析它。您應該使用HTML解析器,如HPLPLE,如Ray Wendlich網站上Galloway的文章How to Parse HTML on iOS中所述。

+0

在它觸及NSXMLParser之前修改NSData是我去過的方法。謝謝。 – Simon

相關問題