Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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
Java 如何使用groovy将另一个xml文件内容添加到现有的xml创建中_Java_Groovy - Fatal编程技术网

Java 如何使用groovy将另一个xml文件内容添加到现有的xml创建中

Java 如何使用groovy将另一个xml文件内容添加到现有的xml创建中,java,groovy,Java,Groovy,我需要收集系统和一些特定于产品的信息,因此有没有一种方法可以将已经存在的xml内容附加到xml builder中的product标记中 使用groovy创建xml的测试代码 import groovy.xml.MarkupBuilder import org.custommonkey.xmlunit.* def writer = new StringWriter() def builder = new groovy.xml.MarkupBuilder(writer) def xml=n

我需要收集系统和一些特定于产品的信息,因此有没有一种方法可以将已经存在的xml内容附加到xml builder中的
product
标记中

使用groovy创建xml的测试代码

import groovy.xml.MarkupBuilder
import org.custommonkey.xmlunit.*

def writer = new StringWriter()  
def builder = new groovy.xml.MarkupBuilder(writer) 

def xml=new XmlSlurper().parse("E:\\DomainMeta.xml")

builder.csm() { 
    system(osname:"linux", hostname:"panther")
    product()
    {
        //Here i'd like to add my xml content, starting with <DomainMeta>
    }

} 
println writer.toString() 

如果您像这样使用StreamingMarkupBuilder,您可以这样做:

import groovy.xml.XmlUtil
import groovy.xml.StreamingMarkupBuilder

def xml = new XmlSlurper().parse("E:\\DomainMeta.xml")

def out = new StreamingMarkupBuilder().bind { 
  csl {
    system(osname:"linux", hostname:"panther")
    product() {
       mkp.yield xml
    }
  }
}

println XmlUtil.serialize( out )
编辑——第二个无关问题的答案 如果在名为
txt
的变量中有该变量,则应能够执行以下操作:

txt = txt.replace( '&lt;', '<' )
         .replace( '&gt;', '>' )
txt=txt.replace(“”,“”)
然后,将
txt
传递到
XmlSlurper.parseText()


虽然说真的,但我要说的是,这是写源代码的问题,因此它不能作为xml使用,但在web上非常漂亮。

如果您使用StreamingMarkupBuilder,您可以这样做:

import groovy.xml.XmlUtil
import groovy.xml.StreamingMarkupBuilder

def xml = new XmlSlurper().parse("E:\\DomainMeta.xml")

def out = new StreamingMarkupBuilder().bind { 
  csl {
    system(osname:"linux", hostname:"panther")
    product() {
       mkp.yield xml
    }
  }
}

println XmlUtil.serialize( out )
编辑——第二个无关问题的答案 如果在名为
txt
的变量中有该变量,则应能够执行以下操作:

txt = txt.replace( '&lt;', '<' )
         .replace( '&gt;', '>' )
txt=txt.replace(“”,“”)
然后,将
txt
传递到
XmlSlurper.parseText()

虽然说真的,我想说的是,这是写源代码的问题,因此它不能作为xml使用,但在web上非常漂亮。

这就是我所做的

问题是,在xml标记生成器期间,如果我们给出一个包含xml/html内容的字符串,它会将
分别转换为
&
,因此为了避免这种情况,将所有
&
替换为
可能会起作用,但有时您会有CDATA部分,其中可能再次包含这就是我所做的


问题是,在xml标记生成器期间,如果我们给出一个包含xml/html内容的字符串,它会将
分别转换为
&
,因此为了避免这种情况,将所有
&
替换为
可能会起作用,但有时你的CDATA部分可能会再次包含感谢,你的回答实际上解决了我的问题,但还有一个问题,我刚刚发现,你能看看我问题的更新部分吗?@AbhishekSimon,那么你是在抓取为web格式化的xml吗?对不起,我不理解“为web”。。但它是一个web应用程序,因此生成的xml将由wep应用程序解析以显示信息neatly@AbhishekSimon通常,向最终用户显示xml没有什么意义,但希望我在答案中添加的内容有所帮助,尽管我已将您的解决方案标记为答案,但我发现xml可能包含CDATA部分的问题。。因此,它不应该取代
&
,谢谢你的回答实际上解决了我的问题,但还有一个问题,我刚刚发现,你能看看我问题的更新部分吗?@AbhishekSimon,那么你是在抓取为web格式化的xml吗?对不起,我不理解“为web”。。但它是一个web应用程序,因此生成的xml将由wep应用程序解析以显示信息neatly@AbhishekSimon通常,向最终用户显示xml没有什么意义,但希望我在答案中添加的内容有所帮助,尽管我已将您的解决方案标记为答案,但我发现xml可能包含CDATA部分的问题。。因此,它不应替换
&
txt = txt.replace( '&lt;', '<' )
         .replace( '&gt;', '>' )
File domainMetaFile = new File(System.getProperty("user.dir")+"/DomainMeta.xml")

if ( domainMetaFile.exists( ) )
{
    String content = domainMetaFile.getText()
    def rootNode= domainMetaFile.readLines().get(0)  
//getting the root node
    def node=rootNode.find("[\\w\\d]+")
    content=content.replaceAll("</"+node+">","").replaceAll("<"+node+">","")     
//removing the root node from the string $content
    csm."$node"{mkp.yieldUnescaped content}  
//adding $content to my existing xml builder (csm)
//Here i am using mkp.yieldUnescaped content to ignore escaping of HTML/XML characters

}
else
csm.DomainMeta(na){}