使用Groovy解析XML:解析XML文件时如何保持CDATA
使用Groovy 2.0.5 JVM 1.6.031,我创建了一个以现有XML文件作为输入的脚本使用Groovy解析XML:解析XML文件时如何保持CDATA,groovy,xml-parsing,cdata,Groovy,Xml Parsing,Cdata,使用Groovy 2.0.5 JVM 1.6.031,我创建了一个以现有XML文件作为输入的脚本 def root = new XmlParser().parse(new File('filename')) 我解析文件并替换如下某些属性 root.Settings.Setting.each { if (it.'@NAME' =~ 'CASEID_SEQUENCE_SIZE') { it.'@VALUE' = '100' def outputfile = new File( level
def root = new XmlParser().parse(new File('filename'))
我解析文件并替换如下某些属性
root.Settings.Setting.each {
if (it.'@NAME' =~ 'CASEID_SEQUENCE_SIZE') {
it.'@VALUE' = '100'
def outputfile = new File( levelConfig.RESULTFILE )
new XmlNodePrinter(new PrintWriter(outputfile)).print(root)
<HandlerURL>
<![CDATA[admin/MainWindow.jsp]]>
</HandlerURL>
最后,将更改写入一个新文件,如下所示
root.Settings.Setting.each {
if (it.'@NAME' =~ 'CASEID_SEQUENCE_SIZE') {
it.'@VALUE' = '100'
def outputfile = new File( levelConfig.RESULTFILE )
new XmlNodePrinter(new PrintWriter(outputfile)).print(root)
<HandlerURL>
<![CDATA[admin/MainWindow.jsp]]>
</HandlerURL>
所有这些都很好,没有问题,除非XML有CDATA,比如
root.Settings.Setting.each {
if (it.'@NAME' =~ 'CASEID_SEQUENCE_SIZE') {
it.'@VALUE' = '100'
def outputfile = new File( levelConfig.RESULTFILE )
new XmlNodePrinter(new PrintWriter(outputfile)).print(root)
<HandlerURL>
<![CDATA[admin/MainWindow.jsp]]>
</HandlerURL>
结果是
<HandlerURL>
admin/MainWindow.jsp
</HandlerURL>
admin/MainWindow.jsp
问题是
如何使脚本不使用CDATA执行任何操作?发现您可以执行以下操作:
import groovy.xml.*
import groovy.xml.dom.DOMCategory
def xml = '''<root>
| <Settings>
| <Setting name="CASEID_SEQUENCE_SIZE">
| <HandlerURL>
| <![CDATA[ admin/MainWindow.jsp ]]>
| </HandlerURL>
| </Setting>
| <Setting name="SOMETHING_ELSE">
| <HandlerURL>
| <![CDATA[ admin/MainWindow.jsp ]]>
| </HandlerURL>
| </Setting>
| </Settings>
|</root>'''.stripMargin()
def document = DOMBuilder.parse( new StringReader( xml ) )
def root = document.documentElement
use(DOMCategory) {
root.Settings.Setting.each {
if( it.'@name' == 'CASEID_SEQUENCE_SIZE' ) {
it[ '@value' ] = 100
}
}
}
def result = XmlUtil.serialize( root )
println result
导入groovy.xml*
导入groovy.xml.dom.domcegory
def xml=''
|
|
|
|
|
|
|
|
|
|
|
|
|''.stripMargin()
def document=domguilder.parse(新的StringReader(xml))
def root=document.documentElement
用途(类别){
root.Settings.Setting.each{
if(it.'@name'='CASEID\u SEQUENCE\u SIZE'){
它['@value']=100
}
}
}
def result=XmlUtil.serialize(根)
打印结果
要获得输出,请执行以下操作:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Settings>
<Setting name="CASEID_SEQUENCE_SIZE" value="100">
<HandlerURL>
<![CDATA[ admin/MainWindow.jsp ]]>
</HandlerURL>
</Setting>
<Setting name="SOMETHING_ELSE">
<HandlerURL>
<![CDATA[ admin/MainWindow.jsp ]]>
</HandlerURL>
</Setting>
</Settings>
</root>
必须将写文件文件更改为XMLUTIL.SerialEngt(根,新PrimTrrItter(OutPutfile)),否则XML就被截断在文件中间某个地方。