java读取XML文件的四种方法总结(必看篇)

时间:2022-10-06 10:35:30       来源:互联网


【资料图】

JAVA操作XML文档主要有四种方式,分别是DOM、SAX、JDOM和DOM4J,DOM和SAX是官方提供的,而JDOM和DOM4J则是引用第三方库的,其中用的最多的是DOM4J方式。运行效率和内存使用方面最优的是SAX,但是由于SAX是基于事件的方式,所以SAX无法在编写XML的过程中对已编写内容进行修改,但对于不用进行频繁修改的需求,还是应该选择使用SAX。

下面基于这四种方式来读取XML文件。

第一,以DOM的方式实现。

package xmls;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import java.io.File;import java.io.IOException;/** * Created by lenovo on 2017-6-3. */public class DOMReadDemo {  public static void main(String[] args){    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();    try{      DocumentBuilder db = dbf.newDocumentBuilder();      Document document = db.parse("src/xmls/DOM.xml");      NodeList booklist = document.getElementsByTagName("book");      for(int i = 0; i < booklist.getLength(); i++){        System.out.println("--------第" + (i+1) + "本书----------");        Element ele = (Element) booklist.item(i);        NodeList childNodes= ele.getChildNodes();        for(int j = 0; j < childNodes.getLength(); j++){          Node n = childNodes.item(j);          if(n.getNodeName() != "#text"){            System.out.println(n.getNodeName() + ":" + n.getTextContent());          }        }        System.out.println("---------------------------------");      }    }catch (ParserConfigurationException e){      e.printStackTrace();    }catch (IOException e){      e.printStackTrace();    }catch (SAXException e){      e.printStackTrace();    }  }}

第二,以SAX的方式实现。

package xmls;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;/** * Created by lenovo on 2017-6-1. */public class xmlTest2 {  public static void main(String[] args){    SAXParserFactory spf = SAXParserFactory.newInstance();    try{      SAXParser sp = spf.newSAXParser();      SAXParserHandler handler = new SAXParserHandler();      sp.parse("src\\xmls\\book.xml", handler);    }catch (Exception e){      e.printStackTrace();    }  }}
package xmls;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;/** * Created by lenovo on 2017-6-1. */public class SAXParserHandler extends DefaultHandler {  @Override  public void startDocument() throws SAXException {    super.startDocument();    System.out.println("SAX解析开始");  }  @Override  public void endDocument() throws SAXException {    super.endDocument();    System.out.println("SAX解析结束");  }  @Override  public void startElement(String s, String s1, String s2, Attributes attributes) throws SAXException {    super.startElement(s, s1, s2, attributes);    System.out.println(s2);    for(int i = 0; i < attributes.getLength(); i++){      String name = attributes.getQName(i);      String value = attributes.getValue(name);      System.out.println("属性值:" + name + "=" + value);    }  }  @Override  public void endElement(String s, String s1, String s2) throws SAXException {    super.endElement(s, s1, s2);    if(s2.equals("book")){      System.out.println("-----------------------");    }  }  @Override  public void characters(char[] ch, int start, int length) throws SAXException {    super.characters(ch, start, length);    String value = new String(ch, start, length);    if(value.trim().equals("")){      return;    }    System.out.println(value);  }}

第三,以JDOM的方式实现。

package xmls;import org.jdom2.Attribute;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.JDOMParseException;import org.jdom2.input.SAXBuilder;import java.io.*;import java.util.List;/** * Created by lenovo on 2017-6-2. */public class JDOMTest {  public static void main(String[] args){    SAXBuilder saxBuilder = new SAXBuilder();    InputStream in;    try{      in = new FileInputStream(new File("src\\xmls\\book.xml"));      Document document = saxBuilder.build(in);      Element rootElement = document.getRootElement();      List<Element> bookList = rootElement.getChildren();      for(Element book: bookList){        System.out.println("第" + (bookList.indexOf(book)+1) + "本书!");        List<Attribute> attrs = book.getAttributes();        for(Attribute attr: attrs){          System.out.println(attr.getName() + "=" + attr.getValue());        }        for(Element item: book.getChildren()){          System.out.println(item.getName() + ":" + item.getValue());        }        System.out.println("------------------------------------");      }    }catch (FileNotFoundException e){      e.printStackTrace();    }catch (JDOMException e){      e.printStackTrace();    }catch (IOException e){      e.printStackTrace();    }  }}

第四,以DOM4J的方式实现。

package xmls;import org.dom4j.*;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.Iterator;import java.util.List;/** * Created by lenovo on 2017-6-2. */public class DOM4JTest {  public void parseXML(){    SAXReader saxReader = new SAXReader();    try{      Document document = saxReader.read(new File("src\\xmls\\book.xml"));      Element rootElement = document.getRootElement();      Iterator it = rootElement.elementIterator();      while (it.hasNext()){        Element book = (Element)it.next();        List<Attribute> attrs = book.attributes();        for(Attribute attr: attrs){          System.out.println("属性名:" + attr.getName() + "---- 属性值:" + attr.getValue() );        }        Iterator cit = book.elementIterator();        while (cit.hasNext()){          Element child = (Element) cit.next();          System.out.println("子节点:" + child.getName());        }      }    }catch (DocumentException e){      e.printStackTrace();    }  }  public static void main(String[] args){    DOM4JTest dom4JTest = new DOM4JTest();    dom4JTest.parseXML();  }}

以上这篇java读取XML文件的四种方法总结(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,。

关键词: java读取XML文件