Java 如何使用groovy将另一个xml文件内容添加到现有的xml创建中
我需要收集系统和一些特定于产品的信息,因此有没有一种方法可以将已经存在的xml内容附加到xml builder中的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
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( '<', '<' )
.replace( '>', '>' )
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( '<', '<' )
.replace( '>', '>' )
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( '<', '<' )
.replace( '>', '>' )
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){}