package at.ac.tuwien.dsg.scaledom.test.util.dom;
import org.apache.xerces.dom.ParentNode;
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 FullOutputCallback implements DOMTraverserCallback {
@Override
public void nodeTraversed(final Document doc, final Node node, final int level) {
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(')');
}
final ParentNode asParentNode = (ParentNode) element;
System.out.println(" with " + asParentNode.getLength() + " children @ " + asParentNode.getNodeLocation());
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;
}
}
}