我在HaXml中使用来自Sax解析器的SaxElement。从SaxElement元素打印有效的XML编码文本的最佳方法是什么?特别是我很有兴趣从SaxReference打印XML编码的文本。不幸的是,SaxElement不是Show类的成员,并且像Reference这样的内部类型的显示不返回XML编码的文本。例如"&"按节目打印为RefEntity" amp"。
我试图让SaxElement成为Show的成员。但它并不完整,看起来很难看。还有更好的方法吗?
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 :(得分:0)
要为SaxElement创建Show实例,您可以使用StandaloneDeriving
pragma,如下所示:
{-# LANGUAGE StandaloneDeriving #-}
import Text.XML.HaXml.SAX
deriving instance Show SaxElement
您将收到有关创建“孤立”实例的警告,但这不是调试或测试的问题。