* xmlTextReaderRead: * @reader: the xmlTextReaderPtr used * * Moves the position of the current instance to the next node in * the stream, exposing its properties. * * Returns 1 if the node was read successfully, 0 if there is no more * nodes to read, or -1 in case of error */
| 1194 | * nodes to read, or -1 in case of error |
| 1195 | */ |
| 1196 | int |
| 1197 | xmlTextReaderRead(xmlTextReaderPtr reader) { |
| 1198 | int val, olddepth = 0; |
| 1199 | xmlTextReaderState oldstate = XML_TEXTREADER_START; |
| 1200 | xmlNodePtr oldnode = NULL; |
| 1201 | |
| 1202 | if (reader == NULL) |
| 1203 | return(-1); |
| 1204 | if (reader->state == XML_TEXTREADER_ERROR) |
| 1205 | return(-1); |
| 1206 | |
| 1207 | reader->curnode = NULL; |
| 1208 | if (reader->doc != NULL) |
| 1209 | return(xmlTextReaderReadTree(reader)); |
| 1210 | if (reader->ctxt == NULL) |
| 1211 | return(-1); |
| 1212 | |
| 1213 | if (reader->mode == XML_TEXTREADER_MODE_INITIAL) { |
| 1214 | reader->mode = XML_TEXTREADER_MODE_INTERACTIVE; |
| 1215 | /* |
| 1216 | * Initial state |
| 1217 | */ |
| 1218 | do { |
| 1219 | val = xmlTextReaderPushData(reader); |
| 1220 | if (val < 0) { |
| 1221 | reader->mode = XML_TEXTREADER_MODE_ERROR; |
| 1222 | reader->state = XML_TEXTREADER_ERROR; |
| 1223 | return(-1); |
| 1224 | } |
| 1225 | } while ((reader->ctxt->node == NULL) && |
| 1226 | ((reader->mode != XML_TEXTREADER_MODE_EOF) && |
| 1227 | (reader->state != XML_TEXTREADER_DONE))); |
| 1228 | if (reader->ctxt->node == NULL) { |
| 1229 | if (reader->ctxt->myDoc != NULL) { |
| 1230 | reader->node = reader->ctxt->myDoc->children; |
| 1231 | } |
| 1232 | if (reader->node == NULL) { |
| 1233 | reader->mode = XML_TEXTREADER_MODE_ERROR; |
| 1234 | reader->state = XML_TEXTREADER_ERROR; |
| 1235 | return(-1); |
| 1236 | } |
| 1237 | reader->state = XML_TEXTREADER_ELEMENT; |
| 1238 | } else { |
| 1239 | if (reader->ctxt->myDoc != NULL) { |
| 1240 | reader->node = reader->ctxt->myDoc->children; |
| 1241 | } |
| 1242 | if (reader->node == NULL) |
| 1243 | reader->node = reader->ctxt->nodeTab[0]; |
| 1244 | reader->state = XML_TEXTREADER_ELEMENT; |
| 1245 | } |
| 1246 | reader->depth = 0; |
| 1247 | reader->ctxt->parseMode = XML_PARSE_READER; |
| 1248 | goto node_found; |
| 1249 | } |
| 1250 | oldstate = reader->state; |
| 1251 | olddepth = reader->ctxt->nodeNr; |
| 1252 | oldnode = reader->node; |
| 1253 |