2014-11-21 45 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