Karate 空手道-无法将java.util.LinkedHashMap转换为java.util.List

Karate 空手道-无法将java.util.LinkedHashMap转换为java.util.List,karate,Karate,我需要将XML文件与Json响应文件进行比较。下面只是原始xml文件的一个简短版本,JSON和xml有不同的属性名称,因此我无法直接比较它们。我需要调用函数来格式化xml,以便将其与json进行比较。在这个过程中,在运行下面的代码之后,我得到了错误无法将java.util.LinkedHashMap转换为java.util.List * xml list = $Test1/Body * print list * def xpath = function(x, p){ try { return

我需要将XML文件与Json响应文件进行比较。下面只是原始xml文件的一个简短版本,JSON和xml有不同的属性名称,因此我无法直接比较它们。我需要调用函数来格式化xml,以便将其与json进行比较。在这个过程中,在运行下面的代码之后,我得到了错误
无法将java.util.LinkedHashMap转换为java.util.List

* xml list = $Test1/Body
* print list

* def xpath = function(x, p){ try { return karate.xmlPath(x, p) } catch (e) { return '#notpresent' } }
* def fun = function(x){ return { code: xpath(x, '/Body/code') } }
* def temp = karate.map(list, fun)
* print temp
Test1是一个包含以下示例数据的xml文件

<ns9:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns5:plan">
  <ns4:code>XPBSMWAT</ns4:code>
</ns9:Body>

XPBSMWAT

这是一个更简单的XML数据版本;我的实际xml文件更大。

karate.map
包含两个参数列表和一个函数

从你的问题来看

* xml list = $Test1/Body
变量名
list
实际上是您定义的
xml
数据类型,不是list

karate将XML/JSON作为java.util.LinkedHashMap,因为您将XML作为输入传递给map函数,它试图将其转换到列表中,但失败了

所以应该是这样的,

* def list = <something>
*定义列表=
但请确保它返回的不是xml而是列表

xml路径
$Test1/Body
返回xml

当您打印列表时,您将看到它被[]


我不太确定您想用这个xml和JS函数做什么,但这可能是导致错误的根本原因。

我迷路了。如果你用你想做的事情来重新写你的问题-这将允许其他人帮助你Hank Peter,在问题中添加了详细信息。试着读几遍:-你不能在XML上做
karate.map()
,它必须是一个JSON数组。感谢Babu提供的信息性答案,但我也尝试过这种方法。但我还是犯了同样的错误。顺便说一句,我补充了更多的细节问题。