ballerina - 如何处理foreach中的xml?--> 不兼容的类型:预期的 'xml',找到 '(xml|string)'
问题描述
有人可以帮助我了解 xml 元素在 foreach 语句中是如何工作的吗?
下面的示例代码显示了访问 xml 元素“Child”的两种不同方式。首先,直接访问所有“Child”(第 3 行),然后仅访问 foreach 循环中特定“Person”的“Child”(第 5 行)。
- 为什么会出现编译错误?
- 在遍历所有“Person”时,我需要做什么才能访问特定“Person”的所有“Child”元素?
测试.bal:
function foo(xml input) returns boolean{
xml listOfPersons = input/<Person>;
xml listOfChildren = input/<Person>/<Child>;
foreach var person in listOfPersons{
xml childrenOfSinglePerson = person/<Child>;
}
}
编译结果:
Compiling source
test.bal
error: .::test.bal:5:20: incompatible types: expected 'xml', found '(xml|string)'
我正在使用芭蕾舞女演员 1.2
解决方案
此错误是由于 xml 迭代器类型检查中的错误造成的。https://github.com/ballerina-platform/ballerina-lang/issues/24562
在程序执行期间,迭代器不会返回
string
结果,因此您可以安全地将person
toxml
或类型保护(类型测试)强制转换,如下所示。
function foo(xml input) returns boolean {
xml listOfPersons = input/<Person>;
xml listOfChildren = input/<Person>/<Child>;
foreach var person in listOfPersons {
if (person is xml) { // Workaround to only consider xml
xml childrenOfSinglePerson = person/<Child>;
return true;
}
}
}
或者,您也可以.forEach
对 xml 值进行方法。
listOfPersons.forEach(function (xml person) { xml c = person/<Child>; io:println(c); });
推荐阅读
- python - 将一些 np 数组作为新列添加到我的数据中
- google-chrome - 如何解决 Chrome 73 上 SVG 旋转 CSS 中的错误?
- git - Where is the database installed for git bonobo?
- java - 测试 double 的值是否小于 int 的最大值
- php - 如何正确配置 PHPMailer - 当前发送电子邮件时出错
- wordpress - How can I modify post titles before Timber::render?
- reactjs - 需要有关如何将 Jquery .change() 转换为 React.js 以显示/隐藏 div 的帮助
- mysql - Tableau中事实表的测量值错误
- mysql - Symfony 学说:映射:导入不导入反射关联表
- php - 无法选择 ip=inet_pton($ip) 的位置