当前位置:  开发笔记 > Android > 正文

如何使用Groovy在xml中插入/移动/删除节点?

如何解决《如何使用Groovy在xml中插入/移动/删除节点?》经验,为你挑选了2个好方法。

例如,我有以下xml文档:

def CAR_RECORDS = '''
    
      
      
      
    
'''

我想把汽车"皇家"推到第一辆,并在汽车"HSV Maloo"之后插入一辆新车,结果将是:

'''
    
      
      
      
      
    
'''

如何用Groovy做到这一点?欢迎评论.



1> Ted Naleid..:

我沿着类似的路线前往danb,但在实际打印出生成的XML时遇到了问题.然后我意识到通过向root询问其所有"car"子项而返回的NodeList与通过询问root的子项获得的列表不同.尽管在这种情况下它们碰巧是相同的列表,但如果在根目录下有非"汽车"子项,它们并不总是如此.因此,重新记录从查询返回的汽车列表不会影响初始列表.

这是一个附加和重新排序的解决方案:

def CAR_RECORDS = '''
   
     
     
     
   
 '''

def carRecords = new XmlParser().parseText(CAR_RECORDS)

def cars = carRecords.children()
def royale = cars.find { it.@name == 'Royale' } 
cars.remove(royale)
cars.add(0, royale)
def newCar = new Node(carRecords, 'car', [name:'My New Car', make:'Peel', year:'1962'])

assert ["Royale", "HSV Maloo", "P50", "My New Car"] == carRecords.car*.@name

new XmlNodePrinter().print(carRecords)

带有属性订购汽车的断言通过,XmlNodePrinter输出:


  
  
  
  



2> flyisland..:

特德,也许你没注意到我想在汽车"HSV Maloo"'''之后插入一辆新车,所以我将你的代码修改为:

def newCar = new Node(null, 'car', [name:'My New Car', make:'Peel', year:'1962'])
cars.add(2, newCar)

new XmlNodePrinter().print(carRecords)

现在,它适用于正确的订单!感谢danb&ted.


  
  
  
  

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有