我有一个要求,要收集系统和一些产品特定信息,那么有没有办法可以product在我的 xml 构建器中将现有的 xml 内容附加到标签中?
我的测试代码使用 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()
Run Code Online (Sandbox Code Playgroud)
我的 xml,必须复制到我在上面构建的另一个 xml 中
<DomainMeta> //there can be more dynamic information inside DomainMeta tag
<Gateways>
<NodeRef name="N_116489" host="panther" httpPort="18,448" port="18,449" />
</Gateways>
<OptionGroup name="DomainOptions">
<Option name="LicenseUsageDetailMinDays" value="90" ></Option>
</OptionGroup>
<OptionGroup name="NodeOptions">
<Option name="LicenseUsageDetailMinDays" value="90" ></Option>
</OptionGroup>
</DomainMeta>
Run Code Online (Sandbox Code Playgroud)
所需输出
<csm>
<system osname='linux' hostname='panther' />
<product>
<DomainMeta>
<Gateways>
<NodeRef name="N_116489" host="panther" httpPort="18,448" port="18,449" />
</Gateways>
<OptionGroup name="DomainOptions">
<Option name="LicenseUsageDetailMinDays" value="90" ></Option>
</OptionGroup>
<OptionGroup name="NodeOptions">
<Option name="LicenseUsageDetailMinDays" value="90" ></Option>
</OptionGroup>
</DomainMeta>
</product>
</csm>
Run Code Online (Sandbox Code Playgroud)
更新
还有一个问题,我问的问题由 tim_yates 回答,但我在这里面临另一个问题,转储中的 xml 数据采用下面给出的格式,@tim:你能帮忙吗?
<DomainMeta>
<Gateways>
<NodeRef name="N_116489" host="panther" httpPort="18,448" port="18,449" />
</Gateways>
<OptionGroup name="DomainOptions">
<Option name="LicenseUsageDetailMinDays" value="90" ></Option>
</OptionGroup>
<OptionGroup name="NodeOptions">
<Option name="LicenseUsageDetailMinDays" value="90" ></Option>
</OptionGroup>
</DomainMeta>
Run Code Online (Sandbox Code Playgroud)
如果您使用 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 )
Run Code Online (Sandbox Code Playgroud)
如果你有一个名为 的变量txt,你应该能够这样做:
txt = txt.replace( '<', '<' )
.replace( '>', '>' )
Run Code Online (Sandbox Code Playgroud)
然后,将其传递txt给XmlSlurper.parseText()
虽然说实话,我想说这是一个将源代码写出来的问题,所以它不能作为 xml 使用,但在网络上很漂亮。
| 归档时间: |
|
| 查看次数: |
1775 次 |
| 最近记录: |