Developing bada: XML Parsing with Namespaces


Thanks to wit’s very helpful introduction into working with XML: Working with Working with XML in Bada (part 1) – Simple XPath Parsing I could quickly enter the quite more sophisticated data processing, but the tutorial reached its bounds when I encountered an XML file with namespaces, which alot xml feeds contain.

Thanks to an overwhelming and impenetrable amount of documentation, I found the solution after long sessions of trial-and-error.

We got a very simple XML file

<?xml version="1.0" encoding="UTF-8"?>
<book xmlns="">

Notice the namespace declared with xmlns="" in the <book> tag? In this case the namespace has no prefix but still all child-tags are included in this namespace. Therefore the XPath Expression //section1 will fail to retrieve the <section1> tag and instead returns NULL.

Would the namespace actually be declared like this:
We would be able to reach the included tags with the XPath Expression:
//my_ns:section1 as the namespace has been registered to an identifier, in this case “my_ns”. Our aim is to do this manually.

Manually register Namespace to Identifier

Thanks to the geeks over at who found the solution to this:
We need to manually register a Namespace within the given XML Context after we initialized the XPath Context itself:

// Initializing Context with the XML file "doc.xml"
xpathCtx = xmlXPathNewContext(doc);
// Registering the Namespace "my_ns" with the given URL
xmlXPathRegisterNs(xpathCtx, (xmlChar*)"my_ns", (xmlChar*)"");

Voilà, now we can finally reach the namespaced tags within our XML document with

PS: To retrieve the <sub> XML Node as the child of <section2> we need to add the namespace to both tag names: //my_ns:section2/my_ns:sub


Write a comment

You need to be logged in to post a comment.