空手道 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 中使用 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>
好消息是,如果您有一些 确实 棘手的 XML 操作要求,字符串 replace
语法可以派上用场。这在 Stack Overflow 的另一个答案中得到了最好的解释: |
我希望通过修改有效的 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 中使用 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>
好消息是,如果您有一些 确实 棘手的 XML 操作要求,字符串 replace
语法可以派上用场。这在 Stack Overflow 的另一个答案中得到了最好的解释: