建议采用dom4j解析xml文件:
测试类:
package com.juchaosoft.test; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Stack; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.jdom2.JDOMException; import org.jdom2.input.SAXBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class ParseXMLFileTest { // 解析xml的四种方式 // https://blog.csdn.net/qq_38695182/article/details/79922262 /** * dom 解析 * * @param filePath * 文件路径 */ public static void parseDom(String pathname) { System.out.println("----------------------dom 解析------------------------"); File file = new File(pathname); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(file); NodeList nodeList = doc.getElementsByTagName("VALUE"); for (int i = 0; i < nodeList.getLength(); i++) { System.out.println(doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue() + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * dom4j 解析 * * @param pathname * 文件路径 */ public static void parseDom4j(String pathname) { System.out.println("----------------------dom4j 解析------------------------"); File file = new File(pathname); SAXReader reader = new SAXReader(); org.dom4j.Document doc; try { doc = reader.read(file); Element root = doc.getRootElement(); Iterator<?> it = root.elementIterator("VALUE"); Element element; while (it.hasNext()) { element = (Element)it.next(); System.out.println(element.elementText("NO") + element.elementText("ADDR")); } } catch (DocumentException e) { e.printStackTrace(); } } /** * jdom 解析 * * @param pathname * 文件路径 */ public static void parseJdom(String pathname) { System.out.println("----------------------jdom 解析------------------------"); File file = new File(pathname); SAXBuilder builder = new SAXBuilder(); org.jdom2.Document doc; try { doc = builder.build(file); org.jdom2.Element root = doc.getRootElement(); List<org.jdom2.Element> children = root.getChildren(); for (org.jdom2.Element element : children) { System.out.println(element.getChildText("NO") + element.getChildText("ADDR")); } } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * sax 解析 * * @param pathname * 文件路径 */ public static void parseSax(String pathname) { System.out.println("----------------------sax 解析------------------------"); SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser parser = factory.newSAXParser(); MySax reader = new MySax(); parser.parse(new InputSource(pathname), reader); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { String pathname = "src/test.xml"; parseDom(pathname); parseDom4j(pathname); parseJdom(pathname); parseSax(pathname); } } class MySax extends DefaultHandler { @SuppressWarnings("rawtypes") Stack tags = new Stack(); public MySax() { super(); } @Override public void characters(char[] ch, int start, int length) throws SAXException { String tag = (String)tags.peek(); System.out.println(("NO".equals(tag) ? new String(ch, start, length) : "") + ("ADDR".equals(tag) ? new String(ch, start, length) : "")); } @SuppressWarnings("unchecked") @Override public void startElement(java.lang.String uri, java.lang.String localName, java.lang.String qName, Attributes attributes) throws SAXException { tags.push(qName); } }
xml文件:
<?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>home</NO> <ADDR>河南省濮阳市</ADDR> </VALUE> <VALUE> <NO>work</NO> <ADDR>广东省广州市</ADDR> </VALUE> </RESULT>
引入jar包:
dom4j-1.6.1.jar,jdom-2.0.2.jar