如何在Groovy中获取XML节点的原始XML字符串?
问题
给定XML结构:
<a> <b> <c>aaa</c> <d a="42"/> </b> </a>
需要提取其中<b>节点对应的完整XML字符串:
<b> <c>aaa</c> <d a="42"/> </b>
尝试使用XmlSlurper.text()方法时,仅返回文本内容"aaa",请问有没有办法不用XmlBuilder重新创建节点,直接获取该节点的原始XML?
已验证的解决方案
最终采用以下Groovy代码实现需求,无需重新构建节点即可输出目标XML:
StringWriter sw = new StringWriter() XmlNodePrinter p = new XmlNodePrinter( new IndentPrinter( sw, '', false, false ), "'" ) p.namespaceAware = false node.children().each p.&print println sw
代码说明
- 借助
XmlNodePrinter直接将目标节点的子元素输出到StringWriter,跳过节点重建步骤 - 初始化
IndentPrinter时,将缩进字符串设为空,同时关闭自动换行和缩进检测,保证输出格式与原始节点一致 - 关闭
namespaceAware属性,避免不必要的命名空间处理干扰输出结果 - 通过
node.children().each p.&print遍历并打印<b>节点下的所有子元素,最终从StringWriter中得到完整的<b>节点XML内容
内容的提问来源于stack exchange,提问作者injecteer
相关产品推荐
相关产品推荐

