Search code examples
javaxmlxpathnamespacesxmlbeans

How to XmlObject.selectPath() by *default* namespace?


I found this method of querying an XmlObject to return an element containing a particular namespace:

   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];

This is pretty straightforward and can be used for other named namespaces, but how do I do the same for a default namespace? i.e. xmlns= like this:

   XmlObject xobj = XmlObject.Factory.parse(
            "<a xmlns='testA'>\n" +
            "  <b xmlns='testB'>\n" +
            "    <x>12345</B:x>\n" +
            "  </b>\n" +
            "</a>");

The xmlbeans documentation only refers to named namespaces... Is there a way to accomplish what I am looking for?


Solution

  • I found the XMLBeans default namespace answer at Applying XPath to an XML with or without namespace.

    Applying it to your example:

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