package pl.edu.mimuw.xmllab; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import java.io.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; /** * Demonstracja DOMa. * * @author Karol Bieńkowski (kab@empolis.pl) */ public class SimpleDOM { /** * Program. * * @param args Lista argumentów */ public static void main(String[] args) { try { if (args.length < 1) { System.err.println("Pierwszy argument to nazwa pliku (np. file:///c:/dir/file.xml)"); System.exit(0); } String fileName = args[0]; // tworze klase, ktora zbuduje drzewo DOM // czesty schemat: mamy fabryke, ktora w zaleznosci od konfiguracji srodowiska // moze stworzyc rozne implementacje interfejsu (tutaj DocumentBuilder) // chcemy parsera walidujacego (fabryka go nam da, jak jakis zna) DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(true); DocumentBuilder builder = factory.newDocumentBuilder(); // tworzymy drzewko w pamieci Document document = builder.parse(fileName); // cos robimy traverseNode(document); } catch (Exception e) { // lapie wszystko e.printStackTrace(); } } // po prostu prosta rekursja private static void traverseNode(Node node) { int nodeType = node.getNodeType(); if (nodeType == Node.TEXT_NODE) { System.out.println("TXT: ["+node.getNodeValue()+"]"); } else if (nodeType == Node.ELEMENT_NODE || nodeType == Node.DOCUMENT_NODE) { NodeList chldrn = node.getChildNodes(); for (int i = 0; i < chldrn.getLength(); i++) { traverseNode(chldrn.item(i)); } } } }