`
rogerhunt
  • 浏览: 60483 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

怎样用Java读取XML文件--(Dom解析器)

 
阅读更多
在这篇文章里,你将看到怎样用DOM XML解析器读取XML文件。DOM解析器解析整个XML文件并把它加载到内存中;然后模式化为一个树结构以便于便利或操作。

总之,就是把转换成了一个DOM对象或者树结构,并且必须一个节点一个节点地遍历以取得你想要的节点。

引用

什么是节点(Node)?
对DOM来说,XML里的所有东西都可以看作一个节点,请查看


引用

警告
当DOM加载一个含有大量数据的XML文档时,速度缓慢并且消费大量的内存。请考虑使用SAX解析器替代,SAX比DOM更快并且使用更少内存。


1.DOM XML解析器例子

通过这个例子你将知道如何通过"name"取得节点,并且显示值。

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-work
	doc.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 value
		System.out.println("\n节点名字 =" + tempNode.getNodeName() + " [OPEN]");
		System.out.println("节点值 =" + tempNode.getTextContent());
 
		if (tempNode.hasAttributes()) {
 
			// get attributes names and values
			NamedNodeMap 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 nodes
			printNote(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 秒)
分享到:
评论

相关推荐

    读取XML文件的四种方法

    使用DOM4J方法读取XML文件,需要创建SAXReader对象,读取XML文件得到Document对象,然后使用Element对象的elementIterator方法获取指定标签的迭代器,遍历迭代器进行数据提取。 优点:DOM4J方法提供了高效的XML解析...

    用java读取xml文件的四种方法

    要读取XML文件,Java提供了多种方法。以下是四种常用的方法,每种都有其适用场景和特点: 1. **DOM解析器(Document Object Model)** DOM解析器将整个XML文件加载到内存中,创建一个树形结构,允许我们通过节点...

    java解析xml数据---sax解析器

    Java解析XML数据主要涉及到的是对XML文档的读取和处理,SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。与DOM(Document Object Model)解析器不同,SAX不需要一次性加载...

    java读取xml文件

    在 Java 中,你可以使用 `javax.xml.parsers.DocumentBuilderFactory` 和 `org.w3c.dom.DocumentBuilder` 来创建一个支持 DTD 验证的解析器。例如: ```java DocumentBuilderFactory factory = ...

    JAVA高手解析XML配置文件的读取操作.pdf

    本文主要讲解了 Java 中如何读取 XML 配置文件,并对 XML 解析器进行了分类,分别介绍了 DOM 和 SAX 两种解析方式的特点和使用场景,并提供了一个使用 SAX 解析器读取 XML 配置文件的示例程序。 在 Java 开发中,...

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    然后,调用`parse()`方法读取XML文件并将其解析为`Document`对象。 - JAXB解析:如果XML文件与Java对象模型有明确的一对一关系,JAXB提供了一种更便捷的方法。使用`Unmarshaller`可以从XML文件中创建Java对象,而`...

    java 解析XML性能对比分析Demo

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过节点遍历访问XML数据。这种方法的优点是操作方便,但缺点是对内存消耗大,不适用于处理大型XML文件。 2. SAX(简单API for XML)解析: 与...

    Android解析xml(2)---DOM解析

    因为DOM解析器将整个文件加载到内存,所以对于大型XML文件,这种方法可能会消耗大量内存,不适合性能要求高的场景。 2. **在Android中使用DOM解析** 在Android中,我们可以使用`javax.xml.parsers....

    使用Java读取XML配置文件

    使用 Java 读取 XML 配置文件 Java 语言和 XML 技术可以说是黄金组合,网上已经有很多文章介绍 ...使用 XML 作为 Java 程序的配置文件可以提高系统的灵活性和可维护性,而使用 SAX 解析器可以高效地读取 XML 文件。

    Java操作XML文件-dom4j .doc

    需要注意的是,DOM4J使用DOM模型处理XML,因此对于大型XML文件,可能会占用大量内存,这时可以考虑使用SAX或StAX等基于事件的解析器来优化性能。 总之,DOM4J是Java处理XML的一个强大工具,它简化了XML文档的读取、...

    用java读取修改xml文件的代码实现

    1. **DOM解析器**: Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口...

    java平台中使用DOM解析xml文件

    3. **加载XML文件**:使用`parse()`方法读取XML文件到`Document`对象。 ```java File inputFile = new File("path_to_your_xml_file.xml"); Document doc = dBuilder.parse(inputFile); ``` 4. **设置文档属性...

    java解析xml并导入数据库(dom4j).doc

    为了解析 XML 文件,需要使用解析器,例如 DOM4J 库。DOM4J 库提供了一个名为 SAXReader 的类,用于读取 XML 文件并将其转换为 Document 对象。 在本例中,我们使用 SAXReader 读取 XML 文件,并将其转换为 ...

    java写XML文件和读取XML文件

    二、Java读取XML文件 1. 使用DOM解析: 读取XML文件时,首先会将整个XML文档加载到内存中的DOM树,然后通过API遍历和访问各个节点。 示例代码: ```java import javax.xml.parsers.DocumentBuilder; import javax....

    java_dom解析xml xml java

    ### Java DOM 解析 XML 在Java中,DOM(Document...上述示例代码展示了如何使用DOM解析器加载XML文件,并从中提取所需的信息。对于初学者来说,这是一个很好的起点,可以帮助理解DOM的基本用法以及如何与XML数据交互。

    DOM读取XML文件

    DOM解析器将整个XML文件加载到内存中,形成一个树形结构,允许开发者通过节点操作来访问和修改XML文档。这种方式的优点在于方便、直观,但缺点是占用内存较大,不适用于处理大型XML文件。 首先,我们需要了解XML的...

    java递归读取xml文件

    DOM解析器会将整个XML文件加载到内存中,形成一个DOM树。每个节点代表XML文档的一个部分,包括元素、属性、注释等。通过DOM API,我们可以轻松地遍历和操作这个树。 2. **递归读取XML** 要实现递归读取,我们需要...

    XML ----DOM操作

    1. **加载XML文档**:首先,我们需要创建一个DOM解析器,如Java中的`DocumentBuilderFactory`和`DocumentBuilder`,它们用于读取XML文件并构建DOM树。 2. **获取根节点**:解析后的XML文档会被转换为一个`Document`...

    Java读取xml文件的四种方法.doc

    在 Java 中读取 XML 文件有多种方法,本文将介绍四种常见的方法,分别使用 DOM、DOM4J、JDOM 和 SAX 解析器。 第一种方法:使用 DOM DOM(Document Object Model)是一种树形结构,用于表示 XML 文档。使用 DOM ...

Global site tag (gtag.js) - Google Analytics