Xml 使用Haskell XHT库呈现CDATA

Xml 使用Haskell XHT库呈现CDATA,xml,haskell,hxt,Xml,Haskell,Hxt,如何使库输出CDATA 例如,在此代码段中运行测试将导致 <?xml version="1.0" encoding="UTF-8"?> <texts>hello&lt;br>world!</texts> 但我需要它来呈现: <?xml version="1.0" encoding="UTF-8"?> <texts><![CDATA[hello<br>world!]]></texts>

如何使库输出CDATA

例如,在此代码段中运行测试将导致

<?xml version="1.0" encoding="UTF-8"?>
<texts>hello&lt;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!"]