3

Groovy 2.0.5 JVM 1.6.0_31 を使用して、既存の 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( levelConfig.RESULTFILE )
new XmlNodePrinter(new PrintWriter(outputfile)).print(root)

このように XML に CDATA がある場合を除いて、これはすべて問題ありません。

<HandlerURL>
   <![CDATA[admin/MainWindow.jsp]]>
</HandlerURL>

そのときの結果は

<HandlerURL>
    admin/MainWindow.jsp
</HandlerURL>

質問は

スクリプトで CDATA を処理しないようにするにはどうすればよいですか?

4

1 に答える 1

0

あなたができることがわかりました:

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

出力を取得するには:

<?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>
于 2012-11-30T16:13:36.517 に答える