2014-11-21 69 views
0

我在HaXml中使用來自Sax解析器的SaxElement。從SaxElement元素中打印有效的XML編碼文本的最佳方法是什麼?特別是我很喜歡從SaxReference打印XML編碼的文本。不幸的是,SaxElement不是Show類的成員,並且顯示內部類型,如Reference不返回XML編碼的文本。例如,「&」通過顯示爲RefEntity「amp」返回。打印XML編碼的Text.XML.HaXml.SAX.SaxElement元素

我試圖讓Show的SaxElement成員。但它不完整,看起來很醜。有沒有更好的辦法?

instance Show(SaxElement) where 
    show (SaxDocTypeDecl decl) = "<!-- TODO: doctype -->" 
    show (SaxProcessingInstruction pi) = "<!-- TODO: processing instruction -->" 
    show (SaxComment s) = "<!--" ++ s ++ "-->" 
    show (SaxElementOpen n attrs) = "<" ++ n ++ ">" -- TODO: attributes 
    show (SaxElementClose n) = "</" ++ n ++ ">" 
    show (SaxElementTag n attrs) = "<" ++ n ++ "/>" -- TODO: attributes 
    show (SaxCharData cd) = cd -- TODO: encode? 
    show (SaxReference r) = show(r) -- TODO: not encoded! 

回答

0

要爲SaxElement創建一個顯示實例可以使用StandaloneDeriving編譯如下:

{-# LANGUAGE StandaloneDeriving #-} 

import Text.XML.HaXml.SAX 

deriving instance Show SaxElement 

你會得到一個有關創建一個「孤兒」實例警告,但這不是一個問題調試或測試。

+1

這不就是輸出xml作爲haskell類型嗎?我認爲@Vladimir希望制定良好的XML。 – jamshidh 2014-11-22 02:15:16