This is the 2.0.0-beta, lots and lots and lots of changes
Have a look at http://xmlsoft.org/upgrade.html
Daniel
diff --git a/xpath.c b/xpath.c
index b2b3c89..398972f 100644
--- a/xpath.c
+++ b/xpath.c
@@ -213,9 +213,9 @@
* Dirty macros, i.e. one need to make assumption on the context to use them
*
* CUR_PTR return the current pointer to the xmlChar to be parsed.
- * CUR returns the current xmlChar value, i.e. a 8 bit value if compiled
- * in ISO-Latin or UTF-8, and the current 16 bit value if compiled
- * in UNICODE mode. This should be used internally by the parser
+ * CUR returns the current xmlChar value, i.e. a 8 bit value
+ * in ISO-Latin or UTF-8.
+ * This should be used internally by the parser
* only to compare to ASCII values otherwise it would break when
* running with UTF-8 encoding.
* NXT(n) returns the n'th next xmlChar. Same as CUR is should be used only
@@ -237,11 +237,8 @@
#define SKIP_BLANKS \
while (IS_BLANK(*(ctxt->cur))) NEXT
-#ifndef USE_UTF_8
#define CURRENT (*ctxt->cur)
#define NEXT ((*ctxt->cur) ? ctxt->cur++: ctxt->cur)
-#else
-#endif
/************************************************************************
* *
@@ -877,7 +874,7 @@
fprintf(xmlXPathDebug, "%s:%d Internal error: no document\n", \
__FILE__, __LINE__); \
} \
- if (ctxt->doc->root == NULL) { \
+ if (ctxt->doc->children == NULL) { \
fprintf(xmlXPathDebug, \
"%s:%d Internal error: document without root\n", \
__FILE__, __LINE__); \
@@ -1496,14 +1493,18 @@
case XML_PI_NODE:
case XML_COMMENT_NODE:
case XML_NOTATION_NODE:
- return(ctxt->context->node->childs);
- case XML_ATTRIBUTE_NODE:
- return(NULL);
+ case XML_DTD_NODE:
+ return(ctxt->context->node->children);
case XML_DOCUMENT_NODE:
case XML_DOCUMENT_TYPE_NODE:
case XML_DOCUMENT_FRAG_NODE:
case XML_HTML_DOCUMENT_NODE:
- return(((xmlDocPtr) ctxt->context->node)->root);
+ return(((xmlDocPtr) ctxt->context->node)->children);
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
+ case XML_ATTRIBUTE_NODE:
+ return(NULL);
}
return(NULL);
}
@@ -1533,11 +1534,11 @@
return(NULL);
if (ctxt->context->node == (xmlNodePtr) ctxt->context->doc)
- return(ctxt->context->doc->root);
- return(ctxt->context->node->childs);
+ return(ctxt->context->doc->children);
+ return(ctxt->context->node->children);
}
- if (cur->childs != NULL) return(cur->childs);
+ if (cur->children != NULL) return(cur->children);
if (cur->next != NULL) return(cur->next);
do {
@@ -1606,13 +1607,17 @@
case XML_PI_NODE:
case XML_COMMENT_NODE:
case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
if (ctxt->context->node->parent == NULL)
return((xmlNodePtr) ctxt->context->doc);
return(ctxt->context->node->parent);
case XML_ATTRIBUTE_NODE: {
xmlAttrPtr att = (xmlAttrPtr) ctxt->context->node;
- return(att->node);
+ return(att->parent);
}
case XML_DOCUMENT_NODE:
case XML_DOCUMENT_TYPE_NODE:
@@ -1655,6 +1660,10 @@
case XML_ENTITY_NODE:
case XML_PI_NODE:
case XML_COMMENT_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
case XML_NOTATION_NODE:
if (ctxt->context->node->parent == NULL)
return((xmlNodePtr) ctxt->context->doc);
@@ -1662,7 +1671,7 @@
case XML_ATTRIBUTE_NODE: {
xmlAttrPtr cur = (xmlAttrPtr) ctxt->context->node;
- return(cur->node);
+ return(cur->parent);
}
case XML_DOCUMENT_NODE:
case XML_DOCUMENT_TYPE_NODE:
@@ -1672,7 +1681,7 @@
}
return(NULL);
}
- if (cur == ctxt->context->doc->root)
+ if (cur == ctxt->context->doc->children)
return((xmlNodePtr) ctxt->context->doc);
if (cur == (xmlNodePtr) ctxt->context->doc)
return(NULL);
@@ -1685,11 +1694,15 @@
case XML_PI_NODE:
case XML_COMMENT_NODE:
case XML_NOTATION_NODE:
+ case XML_DTD_NODE:
+ case XML_ELEMENT_DECL:
+ case XML_ATTRIBUTE_DECL:
+ case XML_ENTITY_DECL:
return(cur->parent);
case XML_ATTRIBUTE_NODE: {
xmlAttrPtr att = (xmlAttrPtr) ctxt->context->node;
- return(att->node);
+ return(att->parent);
}
case XML_DOCUMENT_NODE:
case XML_DOCUMENT_TYPE_NODE:
@@ -1780,13 +1793,13 @@
return(NULL);
if (cur == NULL)
return(ctxt->context->node->next);; /* !!!!!!!!! */
- if (cur->childs != NULL) return(cur->childs);
+ if (cur->children != NULL) return(cur->children);
if (cur->next != NULL) return(cur->next);
do {
cur = cur->parent;
if (cur == NULL) return(NULL);
- if (cur == ctxt->context->doc->root) return(NULL);
+ if (cur == ctxt->context->doc->children) return(NULL);
if (cur->next != NULL) {
cur = cur->next;
return(cur);
@@ -1820,7 +1833,7 @@
do {
cur = cur->parent;
if (cur == NULL) return(NULL);
- if (cur == ctxt->context->doc->root) return(NULL);
+ if (cur == ctxt->context->doc->children) return(NULL);
if (cur->prev != NULL) {
cur = cur->prev;
return(cur);
@@ -2278,7 +2291,7 @@
ID = xmlStrndup(tokens, cur - tokens);
attr = xmlGetID(ctxt->context->doc, ID);
if (attr != NULL) {
- elem = attr->node;
+ elem = attr->parent;
xmlXPathNodeSetAdd(ret->nodesetval, elem);
}
if (ID != NULL)
@@ -3677,6 +3690,8 @@
if (name != NULL)
xmlFree(name);
}
+ if (ctxt->context->nodelist != NULL)
+ valuePush(ctxt, xmlXPathNewNodeSetList(ctxt->context->nodelist));
}
/**