Java解析XML

  虽然开博一年多了,但是今晚还是第一次真正的写博,以前都只是看大牛们的博客,最近发现自己学习过的东西老是忘记,觉得还是要善于总结。由于还不太会使用博客园的编辑功能,发出来可能比较难看,废话少说,开始步入正题。

 一、Java解析XML文档的两种方式:

  (1)Dom方式:Document Object Model,文档对象模型。这种方式是W3C推荐处理XML的一种方式。

  (2)SAX方式:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。

二、XML解析开发包:

  (1)JAXP:是SUN公司推出的解析标准实现。JDK

  (2)Dom4J:是开源组织推出的解析开发包。(大家都在使用)

  (3)JDom:是开源组织推出的解析开发包。

三、使用JAXP进行Dom解析步骤(源代码:E:JavaWorkSpaceday01srccomgnnuitJaxpCRUD.java):

  

   1、获得DocumentBuilder对象:

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();

   2、通过DocumentBuilder获得整个XML文档的Document对象:

    Document document = db.parse("src/books.xml");

   3、通过Document对象操作整个XML文档。

   4、更新XML文档:

    TransformerFactory tff = TransformerFactory.newInstance();
      Transformer tf = tff.newTransformer();
            tf.transform(new DOMSource(document), new StreamResult("src/books.xml"));

四、使用JASP进行SAX解析步骤(源码:E:JavaWorkSpaceday02srccomgnnuitSaxDemo1.java):

  

  注:图片中的SAXReader有误,是XMLReader。

  SAX采用事件处理方式解析XML文件,利用SAX解析XML文档,涉及两个部分:解析器和事件处理器。

  (1)得到解析器

    SAXParser sp = SAXParserFactory.newInstance().newSAXParser();

  (2)得到读取器

    XMLReader reader = sp.getXMLReader();

  (3)设置事件处理器

    reader.setContentHandler(new MyHandler());

  (4)解析XML

    reader.parse("src/book.xml");

   事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。

  常用的是ContentHandler类,常用方法:startElement、endElement、characters。通常是继承DefaultHandler类,再重写里面的方法。

五、使用Dom4J进行解析的步骤(源码:E:JavaWorkSpaceday02srccomgnnuitdom4jDom4JDemo.java):

  (1)得到解析器:

    SAXReader reader = new SAXReader();

  (2)加载XML文档:

    Document document = reader.read("src/book.xml");

  (3)获取根元素:

    Element root = document.getRootElement();

  (4)进行各种操作

  (5)更新XML文档:

    OutputFormat format = OutputFormat.createPrettyPrint();
      format.setEncoding("UTF-8");
           XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
       writer.write(document);
       writer.close();

原文地址:https://www.cnblogs.com/FlySheep/p/3393040.html