Xml 使用Haskell XHT库呈现CDATA
如何使库输出CDATA 例如,在此代码段中运行测试将导致Xml 使用Haskell XHT库呈现CDATA,xml,haskell,hxt,Xml,Haskell,Hxt,如何使库输出CDATA 例如,在此代码段中运行测试将导致 <?xml version="1.0" encoding="UTF-8"?> <texts>hello<br>world!</texts> 但我需要它来呈现: <?xml version="1.0" encoding="UTF-8"?> <texts><![CDATA[hello<br>world!]]></texts>
<?xml version="1.0" encoding="UTF-8"?>
<texts>hello<br>world!</texts>
但我需要它来呈现:
<?xml version="1.0" encoding="UTF-8"?>
<texts><![CDATA[hello<br>world!]]></texts>
HXT能否自动检测是否需要CDATA?我在浏览HXT源时没有找到这样的选项,但您始终可以显式调用mkCdata来构造CDATA文本节点:
import Text.XML.HXT.Core
hello :: ArrowXml a => a XmlTree XmlTree
hello =
mkelem "texts" [] [constA "hello<br>world!" >>> mkCdata]
在您的程序中显式调用mkCdata是否不方便?我在浏览hxt的源代码时没有找到这样的选项。我可以在程序中自己调用mkCdata。但是怎么做呢?这是一个类型错误:X.mkelem text[][X.mkCdata helloworld!]mkCdata是一个箭头,您必须将其与另一个常量字符串箭头(如constA helloworld!)>>>谢谢。这个函数的类型是什么?CDATA txt=mkCdata它与txt的类型相同,即箭头XML a=>String->n XmlTree。
import Text.XML.HXT.Core
hello :: ArrowXml a => a XmlTree XmlTree
hello =
mkelem "texts" [] [constA "hello<br>world!" >>> mkCdata]
import qualified Text.XML.HXT.DOM.XmlNode as XN
txtCdata :: ArrowXml a => String -> a n XmlTree
-- XN.mkCdata :: XmlNode n => String -> n, XmlTree is an instance of XmlNode
-- constA :: Arrow a => c -> a b c, b is free
txtCdata = constA . XN.mkCdata
hello :: ArrowXml a => a XmlTree XmlTree
hello =
mkelem "texts" [] [txtCdata "hello<br>world!"]