如何使用Groovy插入/移动/删除xml中的节点?
发布时间:2020-12-14 16:34:41 所属栏目:大数据 来源:网络整理
导读:例如,我有以下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 ''' 我想把汽车“皇家”推到第一位,并在汽车“
例如,我有以下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> ''' 我想把汽车“皇家”推到第一位,并在汽车“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时遇到了问题.然后我意识到,通过询问所有这个“car”孩子的根而返回的NodeList与你刚才要求根的孩子所得到的不一样.即使在这种情况下他们碰巧是相同的名单,如果根本没有“汽车”的孩子,他们并不总是这样.因此,重新列出从查询返回的汽车列表不会影响初始列表.
这是一个附加和重新排序的解决方案: 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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |