package at.ac.tuwien.dsg.scaledom.test.perf.util.dom; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import at.ac.tuwien.dsg.scaledom.util.DOMTraverserCallback; public class FirstOnLevelCallback implements DOMTraverserCallback { private final int onLevel; private int count; public FirstOnLevelCallback(final int level, final int count) { onLevel = level; this.count = count; } @Override public void nodeTraversed(final Document doc, final Node node, final int level) { if (level == onLevel) { --count; } if (level >= onLevel && count >= 0) { for (int i = 0; i < level; ++i) { System.out.print(" "); } switch (node.getNodeType()) { case Node.CDATA_SECTION_NODE: System.out.println("|- CD: " + node.getNodeValue()); break; case Node.COMMENT_NODE: System.out.println("|- C: " + node.getNodeValue()); break; case Node.DOCUMENT_NODE: System.out.println("|- D: " + node.getNodeName()); break; case Node.DOCUMENT_TYPE_NODE: System.out.println("|- DT: " + node.getNodeName()); break; case Node.ELEMENT_NODE: System.out.print("|- E: " + node.getNodeName()); final Element element = (Element) node; if (element.hasAttributes()) { System.out.print(" ("); final NamedNodeMap attrs = element.getAttributes(); for (int i = 0; i < attrs.getLength(); ++i) { final Attr attr = (Attr) attrs.item(i); System.out.print(attr.getNodeName() + "=\"" + attr.getNodeValue() + "\""); if (i < attrs.getLength() - 1) { System.out.print(", "); } } System.out.print(')'); } System.out.println(); break; case Node.PROCESSING_INSTRUCTION_NODE: System.out.println("|- PI: " + node.getNodeName() + " / " + node.getNodeValue()); break; case Node.TEXT_NODE: System.out.println("|- T: " + node.getNodeValue()); break; } } } }