如何在foreach中处理xml? --> 不兼容的类型:预期 'xml',找到 '(xml|string)'
How to handle xml inside foreach? --> incompatible types: expected 'xml', found '(xml|string)'
有人可以帮助我了解 xml 元素如何针对 foreach 语句工作吗?
下面的示例代码展示了访问 xml 元素“Child”的两种不同方式。首先,直接访问所有“Child”(第 3 行),然后仅访问 foreach 循环内特定“Person”的“Child”(第 5 行)。
- 为什么会出现编译错误?
- 在遍历所有“Person”时,我需要做什么才能访问特定“Person”的所有“Child”元素?
test.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)'
我正在使用 Ballerina 1.2
此错误是由于 xml 迭代器类型检查中的错误造成的。 https://github.com/ballerina-platform/ballerina-lang/issues/24562
在程序执行期间迭代器不会 return string
结果因此你可以安全地将 person
转换为 xml
或者你类型保护(类型测试)如下所示。
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;
}
}
}
或者您也可以在 xml 值上使用 .forEach
方法。
listOfPersons.forEach(function (xml person) { xml c = person/<Child>; io:println(c); });
有人可以帮助我了解 xml 元素如何针对 foreach 语句工作吗?
下面的示例代码展示了访问 xml 元素“Child”的两种不同方式。首先,直接访问所有“Child”(第 3 行),然后仅访问 foreach 循环内特定“Person”的“Child”(第 5 行)。
- 为什么会出现编译错误?
- 在遍历所有“Person”时,我需要做什么才能访问特定“Person”的所有“Child”元素?
test.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)'
我正在使用 Ballerina 1.2
此错误是由于 xml 迭代器类型检查中的错误造成的。 https://github.com/ballerina-platform/ballerina-lang/issues/24562
在程序执行期间迭代器不会 return
string
结果因此你可以安全地将person
转换为xml
或者你类型保护(类型测试)如下所示。
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;
}
}
}
或者您也可以在 xml 值上使用 .forEach
方法。
listOfPersons.forEach(function (xml person) { xml c = person/<Child>; io:println(c); });