/* * 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)+""); } /** * 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]); } }