gpt4 book ai didi

xml - 我可以只给 groovy 的 markupbuilder 一个节点列表吗?

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

我正在使用 groovy 进行一些 XML 处理。具体来说,我通过 XMLParser 吸入一个 XML 文件,进行一整批内存中处理,然后通过 MarkupBuiler 将结果数据序列化回 XML。

文件中的绝大部分数据被传输到非基于 xml 的对象层次结构以与 gui 对话并完成处理,因此这两个 XML 文件永远不知道对方。

但是,有一段 XML 位于源文件的边缘,需要逐字复制到输出 XML 文件,几乎不需要处理。有没有一种方法可以将 XMLParser 中的节点列表交给 MarkupBuilder,然后让它直接将其插入到文档中?

像这样:

def builder = new MarkupBuilder()
builder.outermosttag( name: 'library') {
someothertag( name: 'shelf' ) {

//magically insert a nodelist of arbitrary XML from somewhere else

}
}

最佳答案

XmlParser 返回一个节点,我不知道有什么方法可以在不转换为 xml 字符串的情况下将其插入标记或 StreamingMarkupBuilder。

import groovy.xml.*

def x = """
<root>
<somenode1>
<anode>foo</anode>
</somenode1>
<somenode2>
<anode>bar</anode>
</somenode2>
</root>
""".trim()
def otherXml = new XmlParser().parseText(x)

def writer = new StringWriter()
new XmlNodePrinter(new PrintWriter(writer)).print(otherXml.somenode1[0])

def builder = new MarkupBuilder()
builder.outermosttag( name: 'library') {
someothertag( name: 'shelf' ) {

mkp.yieldUnescaped writer.toString() //magically insert a nodelist of arbitrary XML from somewhere else

}
}

对于此类工作,我倾向于将 XmlSlurper 与 StreamingMarkupBuilder 一起使用:

import groovy.xml.*

def x = """
<root>
<somenode1>
<anode>foo</anode>
</somenode1>
<somenode2>
<anode>bar</anode>
</somenode2>
</root>
""".trim()
def otherXml = new XmlSlurper().parseText(x)

def builder = new StreamingMarkupBuilder().bind {
outermosttag( name: 'library') {
someothertag( name: 'shelf' ) {

mkp.yield otherXml.somenode1 //magically insert a nodelist of arbitrary XML from somewhere else

}
}
}

关于xml - 我可以只给 groovy 的 markupbuilder 一个节点列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1501257/

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