首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

怎样用Java读取XML资料-(Dom解析器)

2013-04-05 
怎样用Java读取XML文件--(Dom解析器)在这篇文章里,你将看到怎样用DOM XML解析器读取XML文件。DOM解析器解析

怎样用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 秒)


2. 循环遍历节点
本例子读取“staff1.xml“文件,并且你将看到如何一个一个地遍历节点,同时输出名字和值,如果有属性的话还可以输出属性。

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 秒)

热点排行