Karate 空手道xpath-我们可以替换/删除节点吗

Karate 空手道xpath-我们可以替换/删除节点吗,karate,Karate,我希望通过修改有效的xml消息文件来测试错误消息。 我可以在场景中轻松添加如下节点: *def invalidDocumentId=read('Valid.xml') *设置invalidDocumentId/soapenv:Envelope/soapenv:Body=Extra 给定请求无效文档ID 但我还想删除节点,更新节点名称,更改属性名称。 有没有办法设置它,或者我需要调用Java com.intuit.karate.XmlUtils。首先,删除和添加节点甚至属性应该很容易,只需使用XP

我希望通过修改有效的xml消息文件来测试错误消息。 我可以在场景中轻松添加如下节点:

*def invalidDocumentId=read('Valid.xml')
*设置invalidDocumentId/soapenv:Envelope/soapenv:Body=Extra
给定请求无效文档ID

但我还想删除节点,更新节点名称,更改属性名称。
有没有办法设置它,或者我需要调用Java com.intuit.karate.XmlUtils。

首先,删除和添加节点甚至属性应该很容易,只需使用XPath中的
remove
set
关键字即可。如果需要,它们将重写值

* def base = <query><name>foo</name></query>
* remove base /query/name
* match base == <query/>
* set base /query/foo = 'bar'
* set base /query/@baz = 'ban'
* match base == <query baz="ban"><foo>bar</foo></query>
*def base=foo
*删除基/查询/名称
*匹配基==
*set base/query/foo='bar'
*set base/query/@baz='ban'
*匹配基==条

好消息是,如果您有一些非常棘手的XML操作需求,字符串
replace
语法将起到解救作用。这在关于堆栈溢出的另一个答案中得到了最好的解释:|

感谢您的快速响应:)这涵盖了我正在尝试做的大部分工作。我的最后一个症结是,当我试图重命名的节点中存在名称空间时{*DEF Base= @ TimeFelthAM,因为您是新的堆栈溢出,请考虑将答案标记为接受。HMM,如果您有一个命名空间,也许更干净的方式是作为第一步,使用“代码>删除E/CONTHORE”取消该属性,对属性似乎不起作用。*移除Base/Qualue/@ XMLNS:TIS不产生一个错误,但不删除该属性…作为解决方法,请查看链接到的其他问题的详细/完整答案above@TimFeltham无法删除XML属性是一个错误,已经修复。将在下一个版本中发布,但我们应该能够很快发布RC5。感谢您发现这一点!