如何在没有命名空间的情况下访问 XML 元素
How to access an XML element without a namespace
以下代码片段可以正常工作并按预期打印 <bar xmlns="x">bar</bar>
:
import ballerina/io;
public function main() {
final xml x1 = xml `<foo xmlns="x">
<bar>bar</bar>
</foo>`;
xmlns "x" as x;
io:println(x1[x:bar]);
}
但是,如果不涉及 XML 个命名空间,如下面的代码片段所示,我会收到意外的编译错误:undefined symbol 'bar'
.
import ballerina/io;
public function main() {
final xml x1 = xml `<foo>
<bar>bar</bar>
</foo>`;
// compilation error: undefined symbol 'bar'
io:println(x1[bar]);
}
没有名称空间时如何访问 XML 元素?例如。 xmlns "" as x;
也是编译错误。
我正在使用 Ballerina 1.1.0。
我不确定你的 Ballerina 版本,但试试这个:
import ballerina/io;
public function main() {
final xml x = xml `<foo>
<bar>bar</bar>
</foo>`;
xml x1 = x.selectDescendants("{}bar");
io:println(x1);
}
我的输出:
<bar>bar</bar>
要在不使用 xml 命名空间前缀的情况下使用 [] 语法,您可以使用字符串文字来指定您想要的元素。这称为扩展形式,其中您在花括号中为名称空间添加前缀。当您没有定义命名空间时,您可以忽略命名空间前缀而只使用元素名称。
import ballerina/io;
public function main() {
final xml x1 = xml `<foo>
<bar>bar</bar>
</foo>`;
// simple element name
io:println(x1["bar"]);
final xml x2 = xml `<foo>
<ns:bar xmlns:ns="ns.uri.com">bar</ns:bar>
</foo>`;
// xml element name in expanded form
io:println(x2["{ns.uri.com}bar"]);
// We can also define the namespace prefix and use it to access
xmlns "ns.uri.com" as ns;
io:println(x2[ns:bar]);
}
以下代码片段可以正常工作并按预期打印 <bar xmlns="x">bar</bar>
:
import ballerina/io;
public function main() {
final xml x1 = xml `<foo xmlns="x">
<bar>bar</bar>
</foo>`;
xmlns "x" as x;
io:println(x1[x:bar]);
}
但是,如果不涉及 XML 个命名空间,如下面的代码片段所示,我会收到意外的编译错误:undefined symbol 'bar'
.
import ballerina/io;
public function main() {
final xml x1 = xml `<foo>
<bar>bar</bar>
</foo>`;
// compilation error: undefined symbol 'bar'
io:println(x1[bar]);
}
没有名称空间时如何访问 XML 元素?例如。 xmlns "" as x;
也是编译错误。
我正在使用 Ballerina 1.1.0。
我不确定你的 Ballerina 版本,但试试这个:
import ballerina/io;
public function main() {
final xml x = xml `<foo>
<bar>bar</bar>
</foo>`;
xml x1 = x.selectDescendants("{}bar");
io:println(x1);
}
我的输出:
<bar>bar</bar>
要在不使用 xml 命名空间前缀的情况下使用 [] 语法,您可以使用字符串文字来指定您想要的元素。这称为扩展形式,其中您在花括号中为名称空间添加前缀。当您没有定义命名空间时,您可以忽略命名空间前缀而只使用元素名称。
import ballerina/io;
public function main() {
final xml x1 = xml `<foo>
<bar>bar</bar>
</foo>`;
// simple element name
io:println(x1["bar"]);
final xml x2 = xml `<foo>
<ns:bar xmlns:ns="ns.uri.com">bar</ns:bar>
</foo>`;
// xml element name in expanded form
io:println(x2["{ns.uri.com}bar"]);
// We can also define the namespace prefix and use it to access
xmlns "ns.uri.com" as ns;
io:println(x2[ns:bar]);
}