如何通过* default * namespace XmlObject.selectPath()?

我找到了查询XmlObject的方法,以返回包含特定命名空间的元素:

XmlObject xobj = XmlObject.Factory.parse( "\n" + " \n" + " 12345\n" + " \n" + ""); // Use xpath with namespace delcaration to find  element. XmlObject bobj = xobj.selectPath( "declare namespace B='testB'" + ".//B:b")[0]; 

这非常简单,可以用于其他命名的命名空间,但是如何为默认命名空间执行相同操作? 即xmlns=像这样:

  XmlObject xobj = XmlObject.Factory.parse( "\n" + " \n" + " 12345\n" + " \n" + ""); 

xmlbeans文档仅引用命名的命名空间…有没有办法完成我要找的东西?

我发现在将XPath应用于带或不带命名空间的XML时, XMLBeans默认命名空间应答。

将它应用于您的示例:

 String nsDeclaration = "declare default element namespace 'testB';"; XmlObject bobj = xobj.selectPath(nsDeclaration + ".//b")[0]; 

xml中的命名空间前缀本质上是命名空间uri的别名。 换句话说,名称空间前缀无关紧要 – 只是名称空间URI。 您可以在xpath中声明名称空间前缀,即使它没有出现在xml文档中。 例如,您可以使用xpath中的“B”前缀来引用默认命名空间:

  // document using default namespace XmlObject xobj = XmlObject.Factory.parse( "\n" + " \n" + " 12345\n" + " \n" + ""); // Use xpath with default namespace declaration to find  element. XmlObject bobj = xobj.selectPath( "declare namespace B=''; " + ".//B:b")[0];