示例:如何使用芭蕾舞演员访问“城市”?
<h:People xmlns:h="http://www.test.com">
<h:name>Anne</h:name>
<h:address>
<h:street>Main</h:street>
<h:city>Miami</h:city>
</h:address>
<h:code>4</h:code>
</h:People>
我尝试使用select函数,但是它没有返回任何信息给我。
payload.select("city")
答案 0 :(得分:1)
要在xml树中搜索子级,应该使用selectDescendants
方法。来自xml type的文档;
<xml> selectDescendants(string qname) returns (xml)
以递归方式在子级中搜索符合条件的元素 命名并返回包含所有内容的序列。不搜寻 在匹配的结果之内。
还应该使用元素的完全限定名称(QName)。在您的示例中,城市元素的QName为{http://www.test.com}city
这是示例代码。
import ballerina/io;
function main (string... args) {
xml payload = xml `<h:People xmlns:h="http://www.test.com">
<h:name>Anne</h:name>
<h:address>
<h:street>Main</h:street>
<h:city>Miami</h:city>
</h:address>
<h:code>4</h:code>
</h:People>`;
io:println(payload.selectDescendants("{http://www.test.com}city"));
}
您还可以利用芭蕾舞女演员内置的对xml namespaces的支持,并通过以下方式访问您的元素。
xmlns "http://www.test.com" as h;
io:println(payload.selectDescendants(h:city));
答案 1 :(得分:1)
我们可以使用相同的方法 selectDescendants ,但是由于您的第二个示例没有xml元素的名称空间,因此,我们必须使用空名称空间来查找子元素,如下所示。另外, selectDescendants 返回具有所有匹配元素的xml序列。因此,要获得所需的xml元素,一种选择是使用正确的索引进行访问。示例代码如下。
import ballerina/io;
function main (string... args) {
xml x = xml `<member>
<sourcedid>
<source>test1</source>
<id>1234.567</id>
</sourcedid>
<entity>
<sourcedid>
<source>test2</source>
<id>123</id>
</sourcedid>
<idtype>1</idtype>
</entity>
<entity>
<sourcedid>
<source>test</source>
<id>123</id>
</sourcedid>
<idtype>2</idtype>
</entity>
</member>`;
//Below would first find all the matched elements with "id" name and then get the first element
xml x1 = x.selectDescendants("{}id")[0];
io:println(x1);
}