Groovy 棒极了。使用MarkupBuilder和XMLSlurper时追加节点
我的问题是在使用MarkupBuilder和XMLSlurper时使用Groovy并附加一个节点 有人能告诉我为什么当我运行此代码直到第一次打印时,我的输出显示目标行为:Groovy 棒极了。使用MarkupBuilder和XMLSlurper时追加节点,groovy,xmlslurper,markupbuilder,Groovy,Xmlslurper,Markupbuilder,我的问题是在使用MarkupBuilder和XMLSlurper时使用Groovy并附加一个节点 有人能告诉我为什么当我运行此代码直到第一次打印时,我的输出显示目标行为: <target-line>0</target-line> 0 但当我运行到第二个println时,目标行的输出现在是: <target-line> <target-line>7</target-line> </target-line> //
<target-line>0</target-line>
0
但当我运行到第二个println时,目标行的输出现在是:
<target-line>
<target-line>7</target-line>
</target-line>
// Complete code
import groovy.xml.*
public class AppendNodeExample {
//Constructor
public AppendNodeExample() {
}
def CreateNewMessage() {
def dataToProcess = '<response><applied-edits><line><id>0100</id>' +
'<flag><mnemonic>TRA</mnemonic><message>TRA Message ' +
'Info.</message></flag><flag><mnemonic>REB</mnemonic>' +
'<message>REB Message Info.</message><target-line>' +
'<target-line>7</target-line></target-line></flag><flag>'+
'<mnemonic>UNB</mnemonic><message>UNB Message Info.</message>'+
'</flag></line></applied-edits></response>'
def rootNode = new XmlSlurper().parseText(dataToProcess.replaceAll(':','-') )
def newXmlFile = new StringWriter()
def xmlCladNew = new groovy.xml.MarkupBuilder(newXmlFile)
xmlCladNew.response()
{
'applied-edits'()
{
rootNode.'applied-edits'.line.each
{ appliedEditsLine ->
line
{
id(appliedEditsLine.id)
appliedEditsLine.flag.each
{ nodeLineFlag ->
flag
{
mnemonic(nodeLineFlag.mnemonic)
message(nodeLineFlag.message)
'target-line'('0')
}
}
}
}
}
}
def rootNodeNew = new XmlSlurper().parseText(newXmlFile.toString())
// First println
println XmlUtil.serialize(rootNodeNew)
rootNodeNew.'applied-edits'.line.each
{ line ->
line.flag.each
{ lineFlag ->
if (lineFlag.mnemonic == 'REB') {
lineFlag.appendNode({'target-line'('7')})
} else {
// Remove the target-line node
lineFlag.'target-line'.replaceNode {}
}
}
}
XmlUtil.serialize(new StreamingMarkupBuilder().bind {mkp.yield rootNodeNew} )
// Second println
println XmlUtil.serialize(rootNode)
}
}
7.
//完整代码
导入groovy.xml*
公共类AppendNodeExample{
//建造师
公共附录nodeExample(){
}
def CreateNewMessage(){
def dataToProcess='0100'+
“塔特拉消息”+
'Info.REB'+
“REB消息信息。”+
'7'+
“取消绑定消息信息。”+
''
def rootNode=new XmlSlurper().parseText(dataToProcess.replaceAll(“:”,“-”)
def newXmlFile=newStringWriter()
def xmlCladNew=new groovy.xml.MarkupBuilder(newXmlFile)
xmlCladNew.response()
{
“应用的编辑”()
{
rootNode.“已应用的编辑”。line.each
{appliedEditsLine->
线
{
id(appliedEditsLine.id)
appliedEditsLine.flag.each
{nodeLineFlag->
旗帜
{
助记符(nodeLineFlag.助记符)
消息(nodeLineFlag.message)
“目标行”(“0”)
}
}
}
}
}
}
def rootNodeNew=new XmlSlurper().parseText(newXmlFile.toString())
//第一打印Ln
println XmlUtil.serialize(rootNodeNew)
rootNodeNew.“已应用的编辑”。行。每行
{line->
line.flag.each
{lineFlag->
if(lineFlag.助记符=='REB'){
appendNode({'target-line'('7')})
}否则{
//删除目标线节点
lineFlag.'target-line'.replaceNode{}
}
}
}
serialize(新StreamingMarkupBuilder().bind{mkp.yield rootNodeNew})
//第二次印刷
println XmlUtil.serialize(rootNode)
}
}
重新格式化代码,使其可读,并遵循任何类型的指导原则,以便更容易发现错误:
import groovy.xml.*
public class AppendNodeExample {
//Constructor
public AppendNodeExample() {
}
def createNewMessage() {
def dataToProcess = '''<response>
| <applied-edits>
| <line>
| <id>0100</id>
| <flag>
| <mnemonic>TRA</mnemonic>
| <message>TRA Message Info.</message>
| </flag>
| <flag>
| <mnemonic>REB</mnemonic>
| <message>REB Message Info.</message>
| <target-line>
| <target-line>7</target-line>
| </target-line>
| </flag>
| <flag>
| <mnemonic>UNB</mnemonic>
| <message>UNB Message Info.</message>
| </flag>
| </line>
| </applied-edits>
|</response>'''.stripMargin()
def rootNode = new XmlSlurper().parseText( dataToProcess )
def newXmlFile = new StringWriter()
def xmlCladNew = new groovy.xml.MarkupBuilder( newXmlFile )
xmlCladNew.response {
'applied-edits' {
rootNode.'applied-edits'.line.each { appliedEditsLine ->
line {
id( appliedEditsLine.id )
appliedEditsLine.flag.each { nodeLineFlag ->
flag {
mnemonic( nodeLineFlag.mnemonic )
message( nodeLineFlag.message )
'target-line'( '0' )
}
}
}
}
}
}
def rootNodeNew = new XmlSlurper().parseText( newXmlFile.toString() )
// First println
println XmlUtil.serialize( rootNodeNew )
rootNodeNew.'applied-edits'.line.each { line ->
line.flag.each { lineFlag ->
if( lineFlag.mnemonic == 'REB' ) {
lineFlag.appendNode { 'target-line'( '7' ) }
} else {
// Remove the target-line node
lineFlag.'target-line'.replaceNode {}
}
}
}
XmlUtil.serialize(new StreamingMarkupBuilder().bind {mkp.yield rootNodeNew} )
// Second println
println XmlUtil.serialize( rootNode )
}
}
new AppendNodeExample().createNewMessage()
导入groovy.xml*
公共类AppendNodeExample{
//建造师
公共附录nodeExample(){
}
def createNewMessage(){
def dataToProcess=''
|
|
| 0100
|
|茶
|TRA消息信息。
|
|
|雷布
|REB消息信息。
|
| 7
|
|
|
|UNB
|UNB消息信息。
|
|
|
|''.stripMargin()
def rootNode=new XmlSlurper().parseText(dataToProcess)
def newXmlFile=newStringWriter()
def xmlCladNew=new groovy.xml.MarkupBuilder(newXmlFile)
xmlCladNew.response{
“应用编辑”{
rootNode.applied-edits.line.each{appliedEditsLine->
线{
id(appliedEditsLine.id)
appliedEditsLine.flag.each{nodeLineFlag->
旗{
助记符(nodeLineFlag.助记符)
消息(nodeLineFlag.message)
“目标行”(“0”)
}
}
}
}
}
}
def rootNodeNew=new XmlSlurper().parseText(newXmlFile.toString())
//第一打印Ln
println XmlUtil.serialize(rootNodeNew)
rootNodeNew.'applied-edits'.line.each{line->
line.flag.each{lineFlag->
if(lineFlag.助记符=='REB'){
lineFlag.appendNode{“目标行”(“7”)}
}否则{
//删除目标线节点
lineFlag.'target-line'.replaceNode{}
}
}
}
serialize(新StreamingMarkupBuilder().bind{mkp.yield rootNodeNew})
//第二次印刷
println XmlUtil.serialize(rootNode)
}
}
新建AppendNodeExample().createNewMessage()
在第二个println中,您打印的是原始rootNode
,您没有对其做任何操作,因此它只包含原始7
节点