gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:40:57 24 4
gpt4 key购买 nike

例如,我有以下xml文档:

def CAR_RECORDS = '''
<records>
<car name='HSV Maloo' make='Holden' year='2006'/>
<car name='P50' make='Peel' year='1962'/>
<car name='Royale' make='Bugatti' year='1931'/>
</records>
'''

我想将汽车“Royale”移到第一辆,并在汽车“HSV Maloo”之后插入一辆新汽车,结果将是:

'''
<records>
<car name='Royale' make='Bugatti' year='1931'/>
<car name='HSV Maloo' make='Holden' year='2006'/>
<car name='My New Car' make='Peel' year='1962'/>
<car name='P50' make='Peel' year='1962'/>
</records>
'''

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

最佳答案

我采用了与 danb 类似的方法,但在实际打印生成的 XML 时遇到了问题。然后我意识到,通过向根询问所有它的“汽车” child 而返回的 NodeList 与您通过询问根的 child 得到的列表不同。即使在这种情况下它们恰好是相同的列表,但如果根目录下有非“汽车”子级,它们就不会总是这样。因此,重新排序查询返回的汽车列表不会影响初始列表。

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

def CAR_RECORDS = '''
<records>
<car name='HSV Maloo' make='Holden' year='2006'/>
<car name='P50' make='Peel' year='1962'/>
<car name='Royale' make='Bugatti' year='1931'/>
</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 输出:

<records>
<car year="1931" make="Bugatti" name="Royale"/>
<car year="2006" make="Holden" name="HSV Maloo"/>
<car year="1962" make="Peel" name="P50"/>
<car name="My New Car" make="Peel" year="1962"/>
</records>

关于xml - 如何使用 Groovy 在 xml 中插入/移动/删除节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com