- printf("PI %s\n", xmlGetNodePath(node));
-
- /* if right PI name, continue parsing PI */
- if (0 == strcmp("zebra-2.0", node->name)){
- xmlChar *pi_p = node->content;
- xmlChar *look = pi_p;
-
- xmlChar *bval;
- xmlChar *eval;
-
- xmlChar *index_p = 0;
-
-
- /* parsing PI record instructions */
- if (0 == strncmp(look, "record", 6)){
- xmlChar id[256];
- xmlChar rank[256];
- xmlChar action[256];
-
- *id = '\0';
- *rank = '\0';
- *action = '\0';
-
- look += 6;
-
- /* eat whitespace */
- while (*look && ' ' == *look && *(look+1))
- look++;
-
- /* parse possible id */
- if (*look && 0 == strncmp(look, "id=", 3)){
- look += 3;
- bval = look;
- while (*look && ' ' != *look)
- look++;
- eval = look;
- strncpy(id, bval, eval - bval);
- id[eval - bval] = '\0';
- }
-
- /* eat whitespace */
- while (*look && ' ' == *look && *(look+1))
- look++;
-
- /* parse possible rank */
- if (*look && 0 == strncmp(look, "rank=", 5)){
- look += 6;
- bval = look;
- while (*look && ' ' != *look)
- look++;
- eval = look;
- strncpy(rank, bval, eval - bval);
- rank[eval - bval] = '\0';
- }
-
- /* eat whitespace */
- while (*look && ' ' == *look && *(look+1))
- look++;
-
- if (look && '\0' != *look){
- printf ("ERROR %s: content '%s'; can not parse '%s'\n",
- xmlGetNodePath(node), pi_p, look);
- } else {
- /* set_record_info(id, rank, action); */
- set_record_info(id, rank, 0);
- }
-
- }
-
- /* parsing index instruction */
- else if (0 == strncmp(look, "index", 5)){
- look += 5;
-
- /* eat whitespace */
- while (*look && ' ' == *look && *(look+1))
- look++;
-
- /* export index instructions to outside */
- *index_pp = look;
-
- /* nor record, neither index */
- } else {
-
- printf ("ERROR %s: content '%s'; can not parse '%s'\n",
- xmlGetNodePath(node), pi_p, look);
- }
- }
+ /* remember indexing instruction from PI to next element node */
+ const char *index_p = 0;
+
+ /* check if we are an element node in the special zebra namespace
+ and either set record data or index value-of node content*/
+ process_xml_element_zebra_node(tinfo, extctr, recword, node);
+
+ /* loop through kid nodes */
+ for (node = node->children; node; node = node->next)
+ {
+ /* check and set PI record and index index instructions */
+ if (node->type == XML_PI_NODE)
+ {
+ process_xml_pi_node(tinfo, extctr, node, &index_p);
+ }
+ else if (node->type == XML_ELEMENT_NODE)
+ {
+ /* if there was a PI index instruction before this element */
+ if (index_p)
+ {
+ index_value_of(tinfo, extctr, recword, node, index_p);
+ index_p = 0;
+ }
+ process_xml_element_node(tinfo, extctr, recword,node);
+ }
+ else
+ continue;
+ }