Xml 我可以用groovy';s markupbuilder是节点列表吗?
我正在用groovy进行一些XML处理。具体地说,我通过XMLParser吸入一个XML文件,进行一整批内存处理,然后通过Markupuiler将结果数据序列化回XML 文件中的绝大多数数据被传输到一个非基于xml的对象层次结构中,以便与gui对话并完成处理,因此这两个xml文件永远不会相互了解 但是,有一段XML位于源文件的边缘,需要将其逐字复制到输出XML文件,而只需很少或根本不进行处理。有没有一种方法可以让MarkupBuilder从XMLParser中获得一个节点列表,并让它将其插入到文档中 大概是这样的:Xml 我可以用groovy';s markupbuilder是节点列表吗?,xml,groovy,nodelist,markupbuilder,Xml,Groovy,Nodelist,Markupbuilder,我正在用groovy进行一些XML处理。具体地说,我通过XMLParser吸入一个XML文件,进行一整批内存处理,然后通过Markupuiler将结果数据序列化回XML 文件中的绝大多数数据被传输到一个非基于xml的对象层次结构中,以便与gui对话并完成处理,因此这两个xml文件永远不会相互了解 但是,有一段XML位于源文件的边缘,需要将其逐字复制到输出XML文件,而只需很少或根本不进行处理。有没有一种方法可以让MarkupBuilder从XMLParser中获得一个节点列表,并让它将其插入到文
def builder = new MarkupBuilder()
builder.outermosttag( name: 'library') {
someothertag( name: 'shelf' ) {
//magically insert a nodelist of arbitrary XML from somewhere else
}
}
我还没试过这个。。。但如果将节点列表序列化为字符串,则可以执行以下操作:
builder.yieldUnescaped(xmlString)
不过还是有点乱 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
}
}
导入groovy.xml*
def x=“”
福
酒吧
“.trim()
def otherXml=new XmlParser().parseText(x)
def writer=new StringWriter()
新建XmlNodePrinter(新建PrintWriter(writer)).print(其他XML.somenode1[0])
def builder=新的MarkupBuilder()
builder.outermosttag(名称:“library”){
someothertag(名称:“shelf”){
mkp.yieldUnescaped writer.toString()//神奇地从其他地方插入任意XML的节点列表
}
}
对于这类工作,我倾向于使用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
}
}
}
导入groovy.xml*
def x=“”
福
酒吧
“.trim()
def otherXml=new XmlSlurper().parseText(x)
def builder=new StreamingMarkupBuilder().bind{
最外层标记(名称:“库”){
someothertag(名称:“shelf”){
mkp.yield otherXml.somenode1//神奇地从其他地方插入任意XML的节点列表
}
}
}
<代码> > p>这里,我可以在使用“<代码> DOMBuilder < /代码> .< /p>时在中间插入一个DOM NODLIST”。
def nodelist = getFromSomewhereElse()
builder.outermosttag( name: 'library') {
someothertag( name: 'shelf' ) {
nodelist.each{ delegate.current.appendChild(it) }
}
}