java解析xml文件的两种方式
1:DOM
原理:把整个文档加载到内存,转化成dom树,之后应用程序可以随机的访问dom树的任何数据,灵活 快,但消耗内存
一个简单的xml
使用java解析
//builder工厂 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { //builder DocumentBuilder builder = factory.newDocumentBuilder(); //解析xml文档 Document doc = builder.parse("src/xmls/demo.xml"); //根据标签名得到元素 NodeList list = doc.getElementsByTagName("student"); //因为只有一个student 所以获取第一个 // Node node=list.item(0); //element继承自node Element student = (Element) list.item(0);//第一个元素 //姓名 Element name = (Element) student.getElementsByTagName("姓名").item(0); String nameValue = name.getFirstChild().getNodeValue(); //年龄 Element age = (Element) student.getElementsByTagName("age").item(0); String ageValue = age.getFirstChild().getNodeValue(); System.out.println(ageValue); //性别 Element sex = (Element) student.getElementsByTagName("sex").item(0); String sexValue = sex.getFirstChild().getNodeValue(); String attib = sex.getAttribute("id"); System.out.println(sexValue); System.out.println(attib); } catch (Exception e) { e.printStackTrace(); }
节点 属性 文本 都可以拿到了,复杂的xml也是使用这么几个方法。
2. sax
只能read 不能edit 相对于DOM方式来说 不会占用太多的内存, 对xml文档进行顺序扫描,有事件发生
输出结果:
public class SaxDemo extends DefaultHandler { @Override public void startDocument() throws SAXException { System.out.println("文档开始。。。"); } @Override public void endDocument() throws SAXException { System.out.println("文档结束。。。"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("元素开始。。"+qName); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("元素结束。。。"+qName); } /** * 文本结点 * @param ch * @param start * @param length * @throws SAXException */ @Override public void characters(char[] ch, int start, int length) throws SAXException { System.out.println(new String(ch,start,length)); } public static void main(String[] args) { SAXParserFactory factory =SAXParserFactory.newInstance(); SAXParser parser= null; try { parser = factory.newSAXParser(); try { parser.parse("src/xmls/demo.xml",new SaxDemo()); } catch (IOException e) { e.printStackTrace(); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } }