Traversing XML Documents
When processing particular information in an XML document, you may often need to navigate a tree from the root to the deepest leaf element in document order.
If you want to traverse (walk through) the complete tree in document order, you can use the
The following examples read a document and print the names of the elements in that document, indented to show the hierarchy.
listChildren(elt: JadeXMLElement; depth: Integer); vars i : Integer; str : String; child : JadeXMLNode; begin foreach i in 1 to depth do str := str & ' '; endforeach; write str & elt.tagName; foreach child in elt.childNodes where child.isKindOf(JadeXMLElement) do listChildren(child.JadeXMLElement, depth + 1); endforeach; end; listElements(fileName: String); vars doc : JadeXMLDocument; begin create doc; doc.parseFile(fileName); listChildren(doc.rootElement, 0); delete doc; end;
The following is output when the listElements method is run on the library1.xml document.
library book title author book title author
As an example of a more-general approach for traversing a tree, you could define the following recursive method of the
walk(); vars child: JadeXMLNode; begin processNode; // process this node foreach child in childNodes do child.walk; endforeach; end;
In the above example, the polymorphic Node::processNode method would provide the specific code to process each type of node. To process the whole document, simply call the following.
doc.walk;