把一个简单功能的SAX改成DOM,大侠们帮帮忙!
实现的功能应该是读出除了catalog外每个node的local name 。。
import org.xml.sax.*;import org.xml.sax.helpers.DefaultHandler;import org.apache.xerces.parsers.SAXParser;public class plantsSAX extends DefaultHandler{ public void endDocument() { System.out.println("Finished!\n"); } public void startElement(String uri, String localName, String rawName,Attributes attributes) { if (!localName.equals("catalog")) System.out.println("Element : " + localName); } public static void main(String[] args) { try{ SaxNames SAXHandler = new SaxNames(); SAXParser parser = new SAXParser(); parser.setContentHandler(SAXHandler); parser.setErrorHandler(SAXHandler); parser.parse(args[0]); } catch(Exception e){e.printStackTrace(System.err);} }}<?xml version="1.0" encoding="iso-8859-1"?><catalog xmlns="urn:mycompany:examples:plants"><plant><common>Bloodroot</common><botanical>Sanguinaria canadensis</botanical><zone>4</zone><light>Mostly Shady</light><price>2.44</price><availability instock="yes">100</availability></plant><plant><common>Columbine</common><botanical>Aquilegia canadensis</botanical><zone>3</zone><light>Full Sun</light><price>49.99</price><availability instock="no"><nextdel>31/03/2009</nextdel></availability></plant><plant><common>Marsh Marigold</common><botanical>Caltha palustris</botanical><zone>4</zone><light>Mostly Sunny</light><price>6.81</price><availability instock="yes"><stocklevel>300</stocklevel></availability></plant></catalog>
1. import java.io.File; 2. import java.util.ArrayList; 3. import java.util.HashMap; 4. import java.util.List; 5. import java.util.Map; 6. import javax.xml.parsers.DocumentBuilder; 7. import javax.xml.parsers.DocumentBuilderFactory; 8. import org.w3c.dom.Document; 9. import org.w3c.dom.Element; 10. import org.w3c.dom.Node; 11. import org.w3c.dom.NodeList; 12. public class ReadXMLMenu { 13. private static ReadXMLMenu xmlMenu=null; 14. private Document doc=null; 15. private List<SystemMenu> parentMenu=new ArrayList<SystemMenu>(); 16. private Map<Integer,List<SystemMenu>> childMenu=new HashMap<Integer,List<SystemMenu>>(); 17. 18. private ReadXMLMenu(String xmlfile)throws Exception { 19. DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 20. dbf.setIgnoringElementContentWhitespace(true); 21. DocumentBuilder db=dbf.newDocumentBuilder();