The mxmlWalkPrev() and mxmlWalkNext() functions can be used to iterate through the XML node tree:
mxml_node_t *node = mxmlWalkPrev(current, tree, MXML_DESCEND); mxml_node_t *node = mxmlWalkNext(current, tree, MXML_DESCEND);
In addition, you can find a named element/node using the mxmlFindElement() function:
mxml_node_t *node = mxmlFindElement(tree, tree, "name", "attr", "value", MXML_DESCEND);
The name, attr, and value arguments can be passed as NULL to act as wildcards, e.g.:
/* Find the first "a" element */ node = mxmlFindElement(tree, tree, "a", NULL, NULL, MXML_DESCEND); /* Find the first "a" element with "href" attribute */ node = mxmlFindElement(tree, tree, "a", "href", NULL, MXML_DESCEND); /* Find the first "a" element with "href" to a URL */ node = mxmlFindElement(tree, tree, "a", "href", "http://www.easysw.com/~mike/mxml/", MXML_DESCEND); /* Find the first element with a "src" attribute*/ node = mxmlFindElement(tree, tree, NULL, "src", NULL, MXML_DESCEND); /* Find the first element with a "src" = "foo.jpg" */ node = mxmlFindElement(tree, tree, NULL, "src", "foo.jpg", MXML_DESCEND);
You can also iterate with the same function:
mxml_node_t *node; for (node = mxmlFindElement(tree, tree, "name", NULL, NULL, MXML_DESCEND); node != NULL; node = mxmlFindElement(node, tree, "name", NULL, NULL, MXML_DESCEND)) { ... do something ... }
The MXML_DESCEND argument can actually be one of three constants:
?xml data node val1 node val2 node val3 group node val4 node val5 node val6 node val7 node val8 node val9
If you started at "val9" and walked using mxmlWalkPrev(), the order would be reversed, ending at "?xml".