diff options
author | Mike Hommey <glandium@debian.org> | 2009-03-01 10:53:23 +0100 |
---|---|---|
committer | Mike Hommey <glandium@debian.org> | 2009-03-01 10:53:23 +0100 |
commit | d03a853bb0370d89552eceee59df1746da4a37f8 (patch) | |
tree | 441802d52ac5c0a2b6929e6dd5d8a58210b0fe3a /xmlreader.c | |
parent | 88f9c7ca80bfbc9a5429fc632b90d6c4a2a2787d (diff) | |
download | libxml2-d03a853bb0370d89552eceee59df1746da4a37f8.tar.gz |
Import upstream version 2.7.0upstream/2.7.0.dfsg
Diffstat (limited to 'xmlreader.c')
-rw-r--r-- | xmlreader.c | 16 |
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; |