我找到了查询XmlObject的方法,以返回包含特定命名空间的元素:
XmlObject xobj = XmlObject.Factory.parse(
"<a xmlns='testA'>\n" +
" <B:b xmlns:B='testB'>\n" +
" <B:x>12345</B:x>\n" +
" </B:b>\n" +
"</a>");
// Use xpath with namespace delcaration to find <B:b> element.
XmlObject bobj = xobj.selectPath(
"declare namespace B='testB'" +
".//B:b")[0];
这非常简单,可用于其他命名的命名空间,但如何对默认命名空间执行相同操作?即xmlns=
喜欢这样:
XmlObject xobj = XmlObject.Factory.parse(
"<a xmlns='testA'>\n" +
" <b xmlns='testB'>\n" +
" <x>12345</B:x>\n" +
" </b>\n" +
"</a>");
xmlbeans documentation仅指名为的名称空间......有没有办法完成我要找的内容?
答案 0 :(得分:1)
xml中的命名空间前缀本质上是命名空间uri的别名。换句话说,名称空间前缀无关紧要 - 只是名称空间URI。您可以在xpath中声明名称空间前缀,即使它没有出现在xml文档中。例如,您可以使用xpath中的'B'前缀来引用默认命名空间:
// document using default namespace
XmlObject xobj = XmlObject.Factory.parse(
"<a xmlns='testA'>\n" +
" <b xmlns=''>\n" +
" <x>12345</x>\n" +
" </b>\n" +
"</a>");
// Use xpath with default namespace declaration to find <b> element.
XmlObject bobj = xobj.selectPath(
"declare namespace B=''; " +
".//B:b")[0];
答案 1 :(得分:1)
我在Applying XPath to an XML with or without namespace找到了XMLBeans默认命名空间的答案。
将它应用于您的示例:
String nsDeclaration = "declare default element namespace 'testB';";
XmlObject bobj = xobj.selectPath(nsDeclaration + ".//b")[0];