读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵。

DOM解析的特性就是读取xml文件转换为 dom树形结构,通过节点进行遍历。

这是W3c关于节点的概念

如果xml中包含有大量的数据,由于dom一次性把xml装入内存中的特性,所以dom不适合于包含大量数据的xml解析。当包含有大量xml的时候,用SAX进行解析比较节省内存。

下面是一个运用DOM进行解析xml文件的例子:

xml文件结构如下:

<?xml version="1.0" encoding="ISO-8859-1"?><bookstore> <book category="cooking"> <title>Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="web"> <title>XQuery Kick Start</title> <author>James McGovern</author> <year>2003</year> <price>49.99</price> </book> <book category="web" cover="paperback"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book></bookstore>

创建解析xml的类如下:

package xml.dom; import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList; public class ReadXmlFile {   public static void main(String[] args) {   try{     File xmlFile = new File("src/resource/book.xml");     DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();     DocumentBuilder builder = builderFactory.newDocumentBuilder();     Document doc = builder.parse(xmlFile);     doc.getDocumentElement().normalize();     System.out.println("Root element: "+doc.getDocumentElement().getNodeName());     NodeList nList = doc.getElementsByTagName("book");     for(int i = 0 ; i<nList.getLength();i++){     Node node = nList.item(i);     System.out.println("Node name: "+ node.getNodeName());  Element ele = (Element)node;     System.out.println("----------------------------");  if(node.getNodeType() == Element.ELEMENT_NODE){     System.out.println("book category: "+ ele.getAttribute("category"));     System.out.println("title name: "+ ele.getElementsByTagName("title").item(0).getTextContent());     System.out.println("author name: "+ele.getElementsByTagName("author").item(0).getTextContent());     System.out.println("year :"+ele.getElementsByTagName("year").item(0).getTextContent());     System.out.println("price : "+ele.getElementsByTagName("price").item(0).getTextContent());     System.out.println("-------------------------");        }        }

解析结果:

Root element: bookstoreNode name: book----------------------------book category: cookingtitle name: Everyday Italianauthor name: Giada De Laurentiisyear :2005price : 30.00-------------------------Node name: book----------------------------book category: childrentitle name: Harry Potterauthor name: J K. Rowlingyear :2005price : 29.99-------------------------Node name: book----------------------------book category: webtitle name: XQuery Kick Startauthor name: James McGovernyear :2003price : 49.99-------------------------Node name: book----------------------------book category: webtitle name: Learning XMLauthor name: Erik T. Rayyear :2003price : 39.95-------------------------
package xml.dom; 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; public class ReadXmlFile2 {   public static void main(String[] args) { try{     File xmlFile = new File("src/resource/book.xml");     DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();     DocumentBuilder builder = builderFactory.newDocumentBuilder();     Document doc = builder.parse(xmlFile);     doc.getDocumentElement().normalize();     System.out.println("Root element: "+doc.getDocumentElement().getNodeName());        if(doc.hasChildNodes()){     printNode(doc.getChildNodes());  } }catch(Exception e){   e.printStackTrace();   }   }   public static void printNode(NodeList nodeList){ System.out.println("------------------------"); // System.out.println(nodeList.getLength()); for(int i = 0; i<nodeList.getLength(); i++){   Node node = (Node)nodeList.item(i);     if(node.getNodeType() == Node.ELEMENT_NODE){   System.out.println("node name: "+node.getNodeName());   System.out.println("node value: "+node.getTextContent());   if(node.hasAttributes()){  NamedNodeMap nodeMap = node.getAttributes();     for(int j = 0; j < nodeMap.getLength() ; j++){     Node nodenew = nodeMap.item(j);     System.out.println("node name "+nodenew.getNodeName());  System.out.println("node value "+nodenew.getNodeValue());  } } if(node.hasChildNodes()){  printNode(node.getChildNodes()); } }   }   } }

输出结果如下:

Root element: bookstore------------------------node name: bookstorenode value:    Everyday Italian Giada De Laurentiis 2005 30.00     Harry Potter J K. Rowling 2005 29.99     XQuery Kick Start James McGovern 2003 49.99     Learning XML Erik T. Ray 2003 39.95   ------------------------node name: booknode value:  Everyday Italian Giada De Laurentiis 2005 30.00  node name categorynode value cooking------------------------node name: titlenode value: Everyday Italiannode name langnode value en------------------------node name: authornode value: Giada De Laurentiis------------------------node name: yearnode value: 2005------------------------node name: pricenode value: 30.00------------------------node name: booknode value:  Harry Potter J K. Rowling 2005 29.99  node name categorynode value children------------------------node name: titlenode value: Harry Potternode name langnode value en------------------------node name: authornode value: J K. Rowling------------------------node name: yearnode value: 2005------------------------node name: pricenode value: 29.99------------------------node name: booknode value:  XQuery Kick Start James McGovern 2003 49.99  node name categorynode value web------------------------node name: titlenode value: XQuery Kick Startnode name langnode value en------------------------node name: authornode value: James McGovern------------------------node name: yearnode value: 2003------------------------node name: pricenode value: 49.99------------------------node name: booknode value:  Learning XML Erik T. Ray 2003 39.95  node name categorynode value webnode name covernode value paperback------------------------node name: titlenode value: Learning XMLnode name langnode value en------------------------node name: authornode value: Erik T. Ray------------------------node name: yearnode value: 2003------------------------node name: pricenode value: 39.95------------------------

关于节点的问题:

<book category="cooking"><title>Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book>

对于 book应用:doc.getChildNodes() 得到一个NodeList其中NodeList的长度为9
9个节点分别如下:
title节点
lang节点
Everyday节点
author节点
Giada De Laurentiis节点
year节点
2005节点
price节点
30.00节点

更多java读取解析xml文件实例相关文章请关注PHP中文网!

更多相关文章

  1. XML(3)XDocument与XmlDocument递归读取xml文件
  2. XML(5)序列化写入xml文件
  3. XML(4)XDocument和XmlDocument搜索指定的节点
  4. dom4j 操作xml文件(全)
  5. XML指南——察看 XML 文件
  6. vbs类天生xml文件
  7. 使用XmlTextWriter生成XML文件

随机推荐

  1. Android的专用驱动
  2. 用Android LiveCD体验Android 操作系统的
  3. android 获取web 内容简单实现
  4. Android除了三大动画,还有哪些动画?
  5. Android通过url获取bitmap图片问题
  6. 【转】有关Android线程的学习
  7. Android初学者入门 从入门到精通
  8. Android混合开发-(Android与Web的交互)
  9. Android安全机制(2) Android Permission权
  10. Android 匿名共享内存Java接口分析