エスケープされたXMLセクションをCDATAブロックに置き換えることを検討しています。これは主に、残念ながら人間が読み取らなければならないXMLの可読性を向上させるためです。
// Input
def xml = '''
<search>
<search-query>
<nested/<
<xml/<
</search-query>
</search>
'''
def search = new XmlParser().parseText(xml)
def query = search."search-query"
query.replaceNode() {
"search-query"() {
// TODO how can I add a CDATA section here?
//yieldUnescaped("<![CDATA[${query.text()}]]>")
}
}
new XmlNodePrinter(preserveWhitespace:true).print(search)
// Expected
'''
<search>
<search-query>
<![CDATA[<nested/>
<xml/>]]>
</search-query>
</search>
'''
- パフォーマンスは重要ではありません
- 特定の要素でのみCDATAを使用できるようにしたい