Каратэ - XML ​​- Печать дочернего узла - PullRequest
0 голосов
/ 07 декабря 2018

Мне нужно напечатать определенный дочерний узел моего XML, который имеет несколько дочерних узлов.Я дал образец XML ниже.Но каратэ конвертируется в json и печатает данные в формате json;но мне нужно, чтобы он был возвращен в XML.

XML:

    * def xml = 
"""
<ns4:root xmlns:ns4="http://foo.com" xmlns:ns5="http://bar.com">
 <ns4:Test>
  <ns5:code>123</ns5:code>
  <ns5:description>My Description</ns5:description>
  <ns5:SubTest>
     <ns6:code>345</ns6:code>
     <ns6:description>Your Description</ns6:description>
     <ns6:categoryCode>BH</ns6:categoryCode>
  </ns5:SubTest>
  <ns5:SubTest>
     <ns6:code>567</ns6:code>
     <ns6:description>Your Description</ns6:description>
     <ns6:categoryCode>BH</ns6:categoryCode>
  </ns5:SubTest>
  <ns5:SubTest>
     <ns6:code>784</ns6:code>
     <ns6:description>Your Description</ns6:description>
     <ns6:categoryCode>BH</ns6:categoryCode>
  </ns5:SubTest>
  <ns5:categoryCode>DUDU</ns5:categoryCode>
  <ns5:unwanted>Unwanted XML Parameter</ns5:unwanted>
 </ns4:Test>
 <ns4:Test>
  <ns5:code>675</ns5:code>
  <ns5:description>His Description</ns5:description>
  <ns5:unwanted>Unwanted XML Parameter</ns5:unwanted>
 </ns4:Test>
</ns4:root>
"""

Это запрос xpath, который я использую для печати второго узла SubTest с кодом = 567.

* def PP_XML = $xml/root/Test/SubTest[2]/*
* print PP_XML

Это дает такой ответ;

13:40:19.391 [ForkJoinPool-1-worker-1] INFO  com.intuit.karate - [print] [
    "567",
    "Your Description",
    "BH"
  ]

Можно ли как-то изолировать и напечатать только второй дочерний узел SubTest в правильном XML?

Iпробовал с ниже тоже;но без удачи.

* def PP_XML = $xml/root/Test/SubTest[2]
* print PP_XML

Я также попробовал процесс исключения, исключив другие 2 дочерних узла, как показано ниже;это выдает ошибку «невозможно преобразовать в xml».Я знаю, что именно так каратэ обрабатывает XML, но хочу знать, смогу ли я воспроизвести это.

* def PP_XML = $xml/root/Test/*[not(self::SubTest[1]) or (self::SubTest[3])]
* xml PP = PP_XML
* print PP

1 Ответ

0 голосов
/ 07 декабря 2018
* def PP_XML = $xml/root/Test/SubTest[2]
* print PP_XML

Дает:

15:21:24.723 [main] INFO  com.intuit.karate - [print] <ns5:SubTest>
  <ns6:code>567</ns6:code>
  <ns6:description>Your Description</ns6:description>
  <ns6:categoryCode>BH</ns6:categoryCode>
</ns5:SubTest>

Кажется, работает просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...