2016-01-03 60 views
1

我正在爲使用包Text.XML和Text.XML.Cursor的網站在Haskell中編寫解析器。如何忽略XML或HTML中未封閉的標籤?

有未關閉的標籤,並得到一個錯誤:

Main.hs: Error parsing XML file dat.html: 29:1-29:8: Expected end element for: Name {nameLocalName = "br", nameNamespace = Nothing, namePrefix = Nothing}, but received: EventEndElement (Name {nameLocalName = "body", nameNamespace = Nothing, namePrefix = Nothing})

怎麼辦?如何忽略這些標籤?

+0

嘗試['tagsoup'](https://hackage.haskell.org/package/tagsoup)。 – Mark

回答

1

帶有未封閉標籤的文本對象不是well-formed因此不是XML。

因此,忘記使用任何XML庫,解析器或工具。根據定義和設計,它們無法爲您提供幫助。

您有兩種選擇。或者,

  1. 通過關閉未封閉的 標籤來修復文本對象的格式。您可以手動執行此操作,也可以嘗試使用TIDY
  2. 定義允許未封閉標記的新數據格式,並從頭編寫一個分析器。
+0

據我所知,未封閉的標籤不符合XML的格式,但它是第三方網站,修改數據不能。 使用庫獲得tagsoup反彙編網站沒有錯誤,但它是不方便的工作。我想找到Text.XML的解決方案。 –

+0

第三方並不重要。不方便並不重要。 **它不是XML,所以你不能期望使用XML庫**我試圖通過解釋你的選擇來幫助你,但是如果你支持XML庫來幫助你解析非XML數據,我和其他人都不能幫助你。祝你好運。 – kjhughes