summaryrefslogtreecommitdiff
path: root/xmlreader.c
diff options
context:
space:
mode:
authorMike Hommey <glandium@debian.org>2009-03-01 10:53:23 +0100
committerMike Hommey <glandium@debian.org>2009-03-01 10:53:23 +0100
commitd03a853bb0370d89552eceee59df1746da4a37f8 (patch)
tree441802d52ac5c0a2b6929e6dd5d8a58210b0fe3a /xmlreader.c
parent88f9c7ca80bfbc9a5429fc632b90d6c4a2a2787d (diff)
downloadlibxml2-d03a853bb0370d89552eceee59df1746da4a37f8.tar.gz
Import upstream version 2.7.0upstream/2.7.0.dfsg
Diffstat (limited to 'xmlreader.c')
-rw-r--r--xmlreader.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/xmlreader.c b/xmlreader.c
index 92b053e..bd47ea5 100644
--- a/xmlreader.c
+++ b/xmlreader.c
@@ -1847,17 +1847,22 @@ xmlTextReaderNextTree(xmlTextReaderPtr reader)
}
if (reader->state != XML_TEXTREADER_BACKTRACK) {
- if (reader->node->children != 0) {
- reader->node = reader->node->children;
- reader->depth++;
+ /* Here removed traversal to child, because we want to skip the subtree,
+ replace with traversal to sibling to skip subtree */
+ if (reader->node->next != 0) {
+ /* Move to sibling if present,skipping sub-tree */
+ reader->node = reader->node->next;
reader->state = XML_TEXTREADER_START;
return(1);
}
+ /* if reader->node->next is NULL mean no subtree for current node,
+ so need to move to sibling of parent node if present */
if ((reader->node->type == XML_ELEMENT_NODE) ||
(reader->node->type == XML_ATTRIBUTE_NODE)) {
reader->state = XML_TEXTREADER_BACKTRACK;
- return(1);
+ /* This will move to parent if present */
+ xmlTextReaderRead(reader);
}
}
@@ -1876,7 +1881,8 @@ xmlTextReaderNextTree(xmlTextReaderPtr reader)
reader->node = reader->node->parent;
reader->depth--;
reader->state = XML_TEXTREADER_BACKTRACK;
- return(1);
+ /* Repeat process to move to sibling of parent node if present */
+ xmlTextReaderNextTree(reader);
}
reader->state = XML_TEXTREADER_END;