/*
* Created on 2005-apr-03
*/
import java.io.File;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.NamedNodeMap;
/**
* DOMEcho är en klass som kan bygga en DOM-modell av ett xml-dokument och lista det
*
* @author Henrik Johansson
*/
public class DOMEcho {
/**
* Skapar en DOM-modell av xml-dokumentet filename,
* samt listar detta dokument
*
* @param filename sökvägen till xml-filen som skall listas
*/
public void echo(String filename) {
try {
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
File xml = new File(filename);
Document document = db.parse(xml);
echoElements(document.getDocumentElement(), 0);
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* Listar ett Element samt alla dess barn
*
* @param element Elementet som skall listas
* @param depth Antalet mellanslag innan utskriften, för vacker indenrtering
*/
private void echoElements(Element element, int depth) {
System.out.print(getWhiteSpace(depth)+"<"+element.getNodeName());
NamedNodeMap nnm = element.getAttributes();
for(int i = 0; i < nnm.getLength(); i++) {
Node attr = nnm.item(i);
System.out.print(' '+attr.getNodeName()+"=\""+attr.getNodeValue()+'"');
}
System.out.println(">");
NodeList children = element.getChildNodes();
for(int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if(child.getNodeType() == Node.ELEMENT_NODE) {
echoElements((Element) child, depth + 2);
} else if(child.getNodeValue().trim().length() > 0) {
System.out.println(getWhiteSpace(depth+2)+child.getNodeValue().trim());
}
}
System.out.println(getWhiteSpace(depth)+""+element.getNodeName()+">");
}
/**
* Producerar en String bestående av num antal blanktecken
*
* @param num Antal blanksteg
* @return den producerade stringen
*/
private String getWhiteSpace(int num) {
String ws = "";
for(int i = 0; i < num; i++) {
ws += ' ';
}
return ws;
}
public static void main(String[] args) {
DOMEcho de = new DOMEcho();
if(args.length != 1) {
System.err.println("usage: DOMEcho ");
System.exit(1);
}
de.echo(args[0]);
}
}