2011-07-24 37 views
0

我不得不處理在HTML裏面不良HTML和HTML標籤屬性:這不適合Html解析器嗎?

<p class="<sometag attr="something"></sometag>"> 
    <a href="<someothertag></someothertag">Link</a> 
</p> 

我試着用HtmlAgilityPack解析出的內容,但是當你在上面的代碼加載到的HTMLDocument,則OuterHtml輸出:

<p class="<sometag attr=" something"="">"> 
    <a href="<someothertag></someothertag">Link</a> 
</p> 

p標籤格式錯誤,進而a標籤的href屬性裏面的someothertag不被識別爲一個節點(雖然它是真正的文本屬性裏面,我想它是RECO gnized作爲標籤)。

有什麼我可以用來幫助我解析這樣的壞Html嗎?

+0

恐怕你不能真的解析這樣的事情。至少不是以你想要的方式工作的方式。爲什麼你需要解析這樣可怕的事情? – svick

+0

我甚至想知道誰/會產生這樣的事情嗎? – ChaosPandion

+0

這是一個我需要處理的自定義模板語法。 – Omar

回答

1

您可能會問很多解析器,因爲這可能是一種罕見的情況。你可能需要自己解決這個問題。

我看到的主要問題是屬性值中有雙引號組。是否保證標記在每次開放時都會有一個匹配的結束字符?換句話說,每一個<會不會有>併爲每開,匹配的結束標記?

如果是這樣的,我的建議是將源的情況下,一個HTML解析器,比如Html Agility Pack,併爲屬性解析添加一些功能;使用堆棧;對於每個開頭的字符,按下它,然後閱讀,直到找到另一個開頭或結尾字符;如果它打開,按下,如果關閉,彈出它

或者,您可以添加檢測爲低於和grea在屬性值中包含三個以上的字符,並且不識別該屬性值的結尾,直到所有包含的標籤都關閉。

另一個可能的解決方案是在將源標記傳遞給解析器並將屬性值中的非法字符更改爲轉義字符(&符號 - 分號)之前修改源標記。不幸的是,這需要你做一些初步的解析。

2

它不是有效的html,所以我不認爲你可以依靠一個html解析器來解析它。