@@ -1434,8 +1434,9 @@ static int parseObjectNode( xmlNodePtr objectNode, ParseState &state )
1434
1434
}
1435
1435
1436
1436
// Work around of the current bug that data resource need to be defined beofre parameter evaluator uses it
1437
- static int parseDataNode ( xmlNodePtr objectNode, ParseState &state )
1437
+ static int parseDataNode ( xmlNodePtr objectNode, ParseState &state , bool & isParsed )
1438
1438
{
1439
+ isParsed = false ;
1439
1440
if ( FmlUtil::contains ( state.parseStack , objectNode ) )
1440
1441
{
1441
1442
const char *name = getStringAttribute ( objectNode, NAME_ATTRIB );
@@ -1453,10 +1454,7 @@ static int parseDataNode( xmlNodePtr objectNode, ParseState &state )
1453
1454
1454
1455
state.parseStack .pop_back ();
1455
1456
1456
- vector<xmlNodePtr>::iterator loc = find ( state.unparsedNodes .begin (), state.unparsedNodes .end (), objectNode );
1457
-
1458
- state.unparsedNodes .erase ( loc );
1459
-
1457
+ isParsed = !err;
1460
1458
}
1461
1459
1462
1460
return err;
@@ -1490,11 +1488,21 @@ static int parseDoc( xmlDocPtr doc, ParseState &state )
1490
1488
1491
1489
// To be improved: Required the following "for" loop to loop through all the top level elements and
1492
1490
// parse the data resources before anything using them.
1493
- for ( vector<xmlNodePtr>::iterator j = state.unparsedNodes .begin (); j != state.unparsedNodes .end ();)
1494
- {
1495
- xmlNodePtr temp_node = *j;
1496
- j++;
1497
- parseDataNode ( temp_node, state );
1491
+ for ( unsigned int index = 0 ; index < state.unparsedNodes .size (); )
1492
+ {
1493
+ bool isParsed = false ;
1494
+ xmlNodePtr objectNode = state.unparsedNodes [index];
1495
+ parseDataNode ( objectNode, state, isParsed );
1496
+ if (isParsed)
1497
+ {
1498
+ // remove from unparsedNodes
1499
+ vector<xmlNodePtr>::iterator loc = find ( state.unparsedNodes .begin (), state.unparsedNodes .end (), objectNode );
1500
+ state.unparsedNodes .erase ( loc );
1501
+ }
1502
+ else
1503
+ {
1504
+ ++index;
1505
+ }
1498
1506
}
1499
1507
1500
1508
while ( state.unparsedNodes .size () != 0 )
0 commit comments