gpt4 book ai didi

xml - 如何打印保留命名空间的 groovy 节点?

转载 作者:数据小太阳 更新时间:2023-10-29 02:07:38 26 4
gpt4 key购买 nike

当我使用此代码输出一些 XML 时,我使用 XmlParser 解析(和修改)

XmlParser parser = new XmlParser()
def root = parser.parseText(feedUrl.toURL().text)
def writer = new StringWriter()
new XmlNodePrinter(new PrintWriter(writer)).print(root)
println writer.toString()

根节点上的 namespace 声明没有打印出来,即使它们存在于 roottoString() 中......有什么想法吗?

最佳答案

我刚刚遇到了同样的问题,经过一番摆弄后,我找到了解决方法。

您使用 XmlSluper 而不是 XmlParser 并使用 StreamingMarkupBuilder 而不是 XmlNodePrinter。然后利用 bind 中的闭包并使用 mkp 内置变量来声明命名空间。

例如;使用上面 Ted 的源 xml 示例:

def root = new XmlSlurper().parseText("http://stackoverflow.com/feeds/question/227447".toURL().text))
def outputBuilder = new StreamingMarkupBuilder()
String result = XmlUtil.serialize(outputBuilder.bind {
mkp.declareNamespace('':'http://www.w3.org/2005/Atom')
mkp.declareNamespace('creativeCommons':'http://backend.userland.com/creativeCommonsRssModule')
mkp.declareNamespace('re':'http://purl.org/atompub/rank/1.0')
mkp.yield root }
)
println result

结果:

<?xml version="1.0" encoding="UTF-8"?><feed xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns="http://www.w3.org/2005/Atom" xmlns:re="http://purl.org/atompub/rank/1.0">
<title type="text">How do I print a groovy Node with namespace preserved? - Stack Overflow </title>
<link rel="self" type="application/atom+xml" href="http://stackoverflow.com/feeds/question/227447"/>
<link rel="alternate" type="text/html" href="http://stackoverflow.com/questions/227447"/>
<subtitle>most recent 30 from stackoverflow.com</subtitle>
<updated>2011-02-16T05:13:17Z</updated>
<id>http://stackoverflow.com/feeds/question/227447</id>
<creativeCommons:license>http://www.creativecommons.org/licenses/by-nc/2.5/rdf</creativeCommons:license>
<entry>
<id>http://stackoverflow.com/questions/227447/how-do-i-print-a-groovy-node-with-namespace-preserved</id>
<re:rank scheme="http://stackoverflow.com">2</re:rank>

关于xml - 如何打印保留命名空间的 groovy 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/227447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com