470,833 Members | 1,345 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,833 developers. It's quick & easy.

Please help extract attributes from root node.

I am writing C code using xpath to extract some data from a XML
document. The file uses namespaces, but the name spaces are all listed
in the root node of the file as attributes. I want to extract all the
attributes, so that I can register the namespaces. The document looks
like:

<?xml version="1.0" encoding="UTF-8" ?>
<ConfigDataFile xmlns:SRI="SRI" xmlns:SIW="SIW" xmlns:QBQ="QBQ"
xmlns:VLD="VLD" xmlns:xsi="http://www.mstsc.com/schema"
xsi:schemaLocation="birdflu.xsd">
<SIW:SIW>
<SIW:herewelive apt="yes" pets="none">
<SIW:color>RED</SIW:color>
</SIW:herewelive>
</SIW:SIW>
<QDB:QDB>
<QDB:herewelive apt="NO" crackhouse="no">
<QDB:color>Blue</SIW:color>
</QDB:herewelive>
</QDB:QDB>
</ConfigDataFile>

My code is:

xmlDocPtr doc = NULL;
xmlNodePtr node_ptr = NULL;
xmlAttrPtr attr_ptr = NULL;
xmlXPathContextPtr xpathCtx = NULL;
xmlXPathObjectPtr xpathObj = NULL;

xmlInitParser();

doc = xmlParseFile("test.xml");
xpathCtx = xmlXPathNewContext(doc);
xpathObj = xmlXPathEvalExpression("//ConfigDataFile", xpathCtx);
node_ptr = xpathObj->nodesetval->nodeTab[0];

attr_ptr = node_ptr->properties;
while (attr_ptr != NULL)
{
printf("The Node name is %s\n", node_ptr->name);
printf("Attribute name: %s\n",attr_ptr->name);
printf("Attribute value: %s\n",xmlGetProp(node_ptr,
attr_ptr->name));

attr_ptr = attr_ptr->next;

}
return 1;
}

The problem is that when I run this, the output is only:

The Node name is ConfigDataFile
Attribute name: schemaLocation
Attribute value: birdflu.xsd

All the other attributes are not there. I have used my debugger to
look at the entire node, and the other attributes are just not there.
If I change the eval expression to any other node, I can print all the
attributes of that node. The only node that refuses to act how I
desire is the ConfigDataFile node.

Thank you.

Jun 8 '06 #1
2 1585
In XPath, namespace nodes are namespace nodes, *not* attribute nodes. If
you want to see them, you need to use the namespace:: axis... which
includes all inherited namespaces as well as those on this specific node.

(XPath 2.0 is changing how it handles namespace information -- long
story -- but the attributes axis will still not include namespace
declarations.)
Jun 8 '06 #2
Bless you Mr. Kesselman.

Joe Kesselman wrote:
In XPath, namespace nodes are namespace nodes, *not* attribute nodes. If
you want to see them, you need to use the namespace:: axis... which
includes all inherited namespaces as well as those on this specific node.

(XPath 2.0 is changing how it handles namespace information -- long
story -- but the attributes axis will still not include namespace
declarations.)


Jun 8 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Maersa | last post: by
1 post views Thread by Chua Wen Ching | last post: by
3 posts views Thread by Steven | last post: by
2 posts views Thread by Sebastian Araya | last post: by
6 posts views Thread by Jakub.Bednarczuk | last post: by
reply views Thread by mihailmihai484 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.