Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 我可以用groovy';s markupbuilder是节点列表吗?_Xml_Groovy_Nodelist_Markupbuilder - Fatal编程技术网

Xml 我可以用groovy';s markupbuilder是节点列表吗?

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中获得一个节点列表,并让它将其插入到文

我正在用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) }
  }
}