[xml] XPath and DTD default values
- From: "Jonas Holmberg" <jonas holmberg frontlinesystem com>
- To: <xml gnome org>
- Subject: [xml] XPath and DTD default values
- Date: Mon, 20 Jun 2005 00:44:45 +0200
Hi.
I have a question about the XPath implementation.
I have tried to get the default attributes from the DTD:s to work with the
XPath lookups.
I am very new to libxml, so if there is a very well known answer, I'm
sorry...
Consider the following document:
<?xml version="1.0"?>
<!DOCTYPE root SYSTEM "root.dtd" [
<!ELEMENT elem (#PCDATA)>
<!ATTLIST elem test CDATA "nothing">
<!ELEMENT root (elem)>
]>
<root>
<elem>data1</elem>
<elem>data2</elem>
<elem test="something">data3</elem>
</root>
with this code:
void doXPath(xmlDocPtr doc,xmlChar* xpathExpr)
{
xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc);
xmlXPathObjectPtr xpathObj = xmlXPathEvalExpression(xpathExpr,xpathCtx);
xmlNodeSetPtr nodes = xpathObj->nodesetval;
for (int i = 0; i < nodes->nodeNr; i++) {
if (nodes->nodeTab[i]->type == XML_ELEMENT_NODE) {
xmlNodePtr node = nodes->nodeTab[i];
xmlChar* pProp = xmlGetProp(node,BAD_CAST "test");
xmlChar* pContent = xmlNodeGetContent(node);
std::cout << "Node: " << node->name << ", Data: " << pContent << ",
test = " << pProp << endl;
xmlFree((void*) pContent);
xmlFree((void*) pProp);
}
}
xmlXPathFreeObject(xpathObjPtr);
xmlXPathFreeContext(xpathContextPtr);
}
doXPath(doc,(xmlChar*) "//root/*");
gives me:
Node: elem, Data: data1, test = nothing
Node: elem, Data: data2, test = nothing
Node: elem, Data: data3, test = something
So, xmlGetProp works great, giving me the default value of "nothing"
doXPath(doc,(xmlChar*) "//root/*[ test=\"something\"");
gives me:
Node: elem, Data: data3, test = something
Still, as expected.
But.
doXPath(doc,(xmlChar*) "//root/*[ test=\"nothing\"");
gives me no results...
Am I wrong in expecting xpath to work with default values, or can anybody
help me out?
Regards
Jonas Holmberg
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]