怎样用Java读取XML文件--(Dom解析器)
在这篇文章里,你将看到怎样用DOM XML解析器读取XML文件。DOM解析器解析整个XML文件并把它加载到内存中;然后模式化为一个树结构以便于便利或操作。
总之,就是把转换成了一个DOM对象或者树结构,并且必须一个节点一个节点地遍历以取得你想要的节点。
Users/tongxiqing/staff.xml<?xml version="1.0" encoding="UTF-8"?><company><staff id="1001"><firstname>政</firstname><lastname>赢</lastname><nickname>秦始皇</nickname><salary>100000</salary></staff><staff id="2001"><firstname>邦</firstname><lastname>刘</lastname><nickname>汉高祖</nickname><salary>200000</salary></staff></company>
ReadXMLFile.java/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.mkyong.seo;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.DocumentBuilder;import org.w3c.dom.Document;import org.w3c.dom.NodeList;import org.w3c.dom.Node;import org.w3c.dom.Element;import java.io.File;/** * * @author Administrator */public class ReadXMLFile { public static void main(String argv[]) { try { File fXmlFile = new File("src/Users/tongxiqing/staff.xml");DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();Document doc = dBuilder.parse(fXmlFile); //optional, but recommended//read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-workdoc.getDocumentElement().normalize(); System.out.println("根节点 :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("staff"); System.out.println("----------------------------"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); System.out.println("\n当前节点 :" + nNode.getNodeName()); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("职工号 : " + eElement.getAttribute("id"));System.out.println("名 : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());System.out.println("姓 : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());System.out.println("号 : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());System.out.println("俸禄 : " + eElement.getElementsByTagName("salary").item(0).getTextContent()); }} } catch (Exception e) {e.printStackTrace(); } } }
run:根节点 :company----------------------------当前节点 :staff职工号 : 1001名 : 政姓 : 赢号 : 秦始皇俸禄 : 100000当前节点 :staff职工号 : 2001名 : 邦姓 : 刘号 : 汉高祖俸禄 : 200000成功构建 (总时间: 0 秒)
Users/tongxiqing/staff1.xml<?xml version="1.0" encoding="UTF-8"?><公司><职员 编号="1001"><姓>政</姓><名>赢</名><号>秦始皇</号><俸禄>100000</俸禄></职员><职员 编号="2001"><姓>邦</姓><名>刘</名><号>汉高祖</号><俸禄>200000</俸禄></职员></公司>
ReadXMLFile2.java/* * To change this template, choose Tools | Templates * and open the template in the editor. */package com.mkyong.seo;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;/** * * @author Administrator */public class ReadXMLFile2 { public static void main(String[] args) { try { File file = new File("src/Users/tongxiqing/staff1.xml"); DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); Document doc = dBuilder.parse(file); System.out.println("根节点 :" + doc.getDocumentElement().getNodeName()); if (doc.hasChildNodes()) { printNote(doc.getChildNodes()); } } catch (Exception e) {System.out.println(e.getMessage()); } } private static void printNote(NodeList nodeList) { for (int count = 0; count < nodeList.getLength(); count++) { Node tempNode = nodeList.item(count); // make sure it's element node.if (tempNode.getNodeType() == Node.ELEMENT_NODE) { // get node name and valueSystem.out.println("\n节点名字 =" + tempNode.getNodeName() + " [OPEN]");System.out.println("节点值 =" + tempNode.getTextContent()); if (tempNode.hasAttributes()) { // get attributes names and valuesNamedNodeMap nodeMap = tempNode.getAttributes(); for (int i = 0; i < nodeMap.getLength(); i++) { Node node = nodeMap.item(i);System.out.println("属性名字 : " + node.getNodeName());System.out.println("属性值 : " + node.getNodeValue()); } } if (tempNode.hasChildNodes()) { // loop again if has child nodesprintNote(tempNode.getChildNodes()); } System.out.println("节点名字 =" + tempNode.getNodeName() + " [CLOSE]"); } } } }
run:根节点 :公司节点名字 =公司 [OPEN]节点值 =政赢秦始皇100000邦刘汉高祖200000节点名字 =职员 [OPEN]节点值 =政赢秦始皇100000属性名字 : 编号属性值 : 1001节点名字 =姓 [OPEN]节点值 =政节点名字 =姓 [CLOSE]节点名字 =名 [OPEN]节点值 =赢节点名字 =名 [CLOSE]节点名字 =号 [OPEN]节点值 =秦始皇节点名字 =号 [CLOSE]节点名字 =俸禄 [OPEN]节点值 =100000节点名字 =俸禄 [CLOSE]节点名字 =职员 [CLOSE]节点名字 =职员 [OPEN]节点值 =邦刘汉高祖200000属性名字 : 编号属性值 : 2001节点名字 =姓 [OPEN]节点值 =邦节点名字 =姓 [CLOSE]节点名字 =名 [OPEN]节点值 =刘节点名字 =名 [CLOSE]节点名字 =号 [OPEN]节点值 =汉高祖节点名字 =号 [CLOSE]节点名字 =俸禄 [OPEN]节点值 =200000节点名字 =俸禄 [CLOSE]节点名字 =职员 [CLOSE]节点名字 =公司 [CLOSE]成功构建 (总时间: 0 秒)