空手道 xpath - 我们可以 replace/delete 一个节点吗

karate xpath - Can we replace/delete a node

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

* def invalidDocumentId = read('Valid.xml') * set invalidDocumentId /soapenv:Envelope/soapenv:Body = <tis:extraBonus>Extra</tis:extraBonus> Given request invalidDocumentId

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

首先,删除和添加节点甚至属性应该很容易,只需在 XPath 中使用 removeset 关键字即可。如果需要,他们将覆盖值。

* 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>

好消息是,如果您有一些 确实 棘手的 XML 操作要求,字符串 replace 语法可以派上用场。这在 Stack Overflow 的另一个答案中得到了最好的解释: |