`
ttang1990
  • 浏览: 2205 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

XML解析——Java-DOM

阅读更多
参考了http://java.chinaitlab.com/XMLBeans/36082.html
还参考了某位的代码,找不到原文了,见谅
待解析的xml范例:
<?xml version="1.0" encoding="gb2312"?>
<books>
<book email="X@163.com">
    <name>Bible
</name>
    <price>60.0</price>
  </book>
  
  
    <book email="Y@gmail.com">
    <name>TAOCP</name>
    <price>600.0
    </price>
  </book>
</books>

Java代码:
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;

public class TestDom {
	public static void main(String[] args) {
		//test2();
		getSpecTagVal("book.xml", "name");
	}
	/**
	 * getSpecTagVal直接提取某个tag的值,不理会层次结构
	 * */
	public static void getSpecTagVal(String filename, String tag){
		//String filename = "book.xml";
		// 获得一个XML文件的解析器
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			// 解析XML文件生成DOM文档的接口类,以便访问DOM
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document document = db.parse(new File(filename));
			// 获得根节点
			Element element = document.getDocumentElement();
			// 获得根节点的子节点列表
			NodeList books = element.getChildNodes();
			for(int i = 0; i < books.getLength(); i++){
				walkNode(books.item(i), tag);
			}
		} catch (Exception ie) {
			ie.printStackTrace();
		}
	}
	public static void test2(){
		String filename = "book.xml";
		// 获得一个XML文件的解析器
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			// 解析XML文件生成DOM文档的接口类,以便访问DOM
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document document = db.parse(new File(filename));
			// 获得根节点
			Element element = document.getDocumentElement();
			// 获得根节点的子节点列表
			NodeList books = element.getChildNodes();
			if(books != null){
				for(int i = 0; i < books.getLength(); i++){
					Node book = books.item(i);
					System.out.println("==========" + i + "============");
					//System.out.println(book.getAttributes().toString());
					if(book.getNodeType() == Node.ELEMENT_NODE){
						String email = book.getAttributes().getNamedItem("email").getNodeValue();
						System.out.println(email);
						for(Node n = book.getFirstChild(); n != null; n = n.getNextSibling()){
							if(n.getNodeType() == Node.ELEMENT_NODE){
								if(n.getNodeName().equals("name")){
									String name = n.getNodeValue();
									String name1 = n.getFirstChild().getNodeValue();
									System.out.println(name + "\n" + name1);
								}
								if(n.getNodeName().equals("price")){
									//String price = n.getNodeValue();
									String price1 = n.getFirstChild().getNodeValue();
									System.out.println(price1);
								}
							}
						}
					}
				}
			}
		} catch (Exception ie) {			
			ie.printStackTrace();
		}
	}
	public static void test() {
		String filename = "book.xml";
		// 获得一个XML文件的解析器
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			// 解析XML文件生成DOM文档的接口类,以便访问DOM
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document document = db.parse(new File(filename));
			// 获得根节点
			Element element = document.getDocumentElement();
			// 获得根节点的子节点列表
			NodeList list = element.getChildNodes();
			for (int i = 0; i < list.getLength(); i++) {
				Node node = list.item(i);
				walkNode(node);
			}

		} catch (Exception ie) {
			
			ie.printStackTrace();
		}

	}

	private static void walkNode(Node anode, String tag) {		
		if(anode.getNodeType() == Node.ELEMENT_NODE && anode.getNodeName() == tag){
			System.out.println(anode.getNodeName() + "\t" + anode.getFirstChild().getNodeValue());
		}
		if(anode.hasChildNodes()){
			NodeList child = anode.getChildNodes();
			for (int i = 0; i < child.getLength(); i++) {								
				walkNode(child.item(i), tag);				
			}
		}
	}
	private static void walkNode(Node anode) {		
		if(anode.getNodeType() == Node.ELEMENT_NODE){
			System.out.println(anode.getNodeName() + "\t" + anode.getFirstChild().getNodeValue());
		}
		if(anode.hasChildNodes()){
			NodeList child = anode.getChildNodes();
			for (int i = 0; i < child.getLength(); i++) {								
				walkNode(child.item(i));				
			}
		}
	}


  这个代码是可以跑的,鉴于网上很多代码(我看到的)都产生莫名其妙的输出,我就把自己修修改改过的代码贴出来,主要方便新手学习吧!代码注释写的不多,看JDK的API来理解每个方法的作用吧!
目前我对xml解析也是刚刚接触,了解很浅,欢迎交流、批评指正
0
0
分享到:
评论
1 楼 fanxin1437 2012-06-18  

相关推荐

    安卓Android源码——xml-dom201311060201.zip

    《安卓Android源码解析——XML DOM解析框架》 在安卓Android开发中,XML(eXtensible Markup Language)作为一种标记语言,广泛用于数据交换、配置文件等场景。XML文档对象模型(Document Object Model, DOM)是...

    java解析xml——dom

    ### Java解析XML——DOM详解 #### 一、DOM解析概念 ...总之,DOM是一种强大的XML解析技术,在Java中被广泛使用。通过熟练掌握DOM API,开发人员能够有效地处理和操纵XML数据,满足各种应用程序的需求。

    axiom-dom-1.2.11.jar.zip

    在实际应用中,"axiom-dom-1.2.11.jar"可以作为依赖包被其他Java项目引入,用于XML的解析、转换和生成。例如,它可以用于XML Schema验证,或者与Web服务(如SOAP)进行交互,因为这些场景经常涉及到XML数据的处理。 ...

    XML解析器————

    Xerces-J是Apache软件基金会开发的一个高性能、全功能的XML解析器,专门针对Java平台设计。 Xerces-J-bin.2.9.1是Xerces-J的一个特定版本,包含了用于解析和验证XML文档的所有必要组件。这个版本提供了以下关键特性...

    dom4j---xml解析jar包

    **DOM4J——XML解析库详解** XML(eXtensible Markup Language)作为一种标记语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行...

    Android XML解析—— Pull解析XML(待完善)

    XML解析是将XML文档转换为程序可以理解的结构化数据的过程。本文主要关注Android中的Pull解析方式来处理XML,这是一种轻量级、低内存占用的解析方法。 **什么是XML Pull解析** XML Pull解析器(XML Pull Parser)...

    Java Web 开发实战经典(基础篇)

    010302_XML解析 —— DOM 010303_XML解析 —— SAX 010304_XML解析 —— JDOM 010305_XML解析 —— DOM4J 010306_使用JavaScript操作DOM 010401_Tomcat服务器的安装及配置 020501_注释及Scriptlet 020502_page指令 ...

    beta-dom3-Xerces-J-bin.2.6.0.zip

    《Xerces-J-bin.2.6.0.zip——深入解析SAX XML解析器与Xerces库》 XML(eXtensible Markup Language)作为一种通用的数据交换格式,广泛应用于互联网及软件开发领域。在处理XML文档时,解析器扮演着至关重要的角色...

    Java解析xml的包--xerces.jar 用于开发xml相关的内空的包..zip

    总之,Xerces.jar作为Java的XML解析库,提供了强大且高效的XML处理功能,无论是在DOM、SAX还是JAXP模式下,都能满足开发者处理XML文档的需求。在C#开发中,虽然不直接使用,但了解其功能和用法对于跨平台开发或理解...

    xml数据前后台解析:jdom与dom4j源码,程序可以跑

    本文将深入探讨XML数据在前后台解析的过程中,重点介绍两种主流的Java XML解析库——JDOM和DOM4J,并提供实际运行的程序示例。同时,我们还会讨论如何使用jQuery在前端解析XML并展示数据。 首先,让我们了解XML的...

    VTD-XML 不同于SAX和DOM的XML高效解析器

    在处理XML时,有多种解析器可供选择,包括SAX(Simple API for XML)、DOM(Document Object Model)以及我们今天要讨论的主题——VTD-XML。 **VTD-XML解析器** VTD-XML是由XimpleWare公司开发的一种高效的XML解析...

    dom4j--java框架技术

    **DOM4J——Java框架技术详解** DOM4J是一个强大的Java XML处理库,它提供了全面的XML解决方案,包括解析、生成、操作和序列化XML文档。DOM4J因其易用性和高性能,在Java开发者中广受欢迎,是许多Java框架如Spring...

    xml课程设计---xml留言板

    - JSP中使用XML:通过JSP内置对象(如`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`)解析XML文档,读取和修改数据。 - JSP动态生成XML:利用JSP的输出功能,可以在服务器端生成XML响应,...

    Java中四种XML解析技术分析对比

    本篇文章将深入探讨四种主要的XML解析技术——DOM、SAX、StAX以及JAXB,并进行详细的分析与对比。 1. DOM(Document Object Model) DOM解析器将整个XML文档加载到内存中,形成一个树形结构,即DOM树。这种解析方式...

    Android创建与解析XML(二)——详解Dom方式

    Dom方式创建与解析XML文档是一种使用编程语言,如Java,在Android平台实现的方式。这种方式利用了DOM(文档对象模型)的API,其中JAXP(Java API for XML Processing)提供的DocumentBuilder类是用来创建和解析XML...

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

    首先,我们需要引入处理XML的Java库——JAXB(Java Architecture for XML Binding)和DOM(Document Object Model)API。JAXB用于对象与XML之间的映射,而DOM则用于解析整个XML文档到内存中的树形结构。对于数据库...

    xml解析中文笔记.docx

    - **xerces简介**:Apache xerces是目前最常用的XML解析器之一,它同时支持DOM和SAX两种解析标准,是许多Java项目中首选的XML解析库。 - **应用场景**:在Java环境中,xerces常被用作DOM和SAX的具体实现,帮助...

    java反射机制 字符串——java对象

    Java提供了多种XML解析器,如DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。DOM解析器将整个XML文档加载到内存中,形成一棵树形结构,便于遍历和操作;SAX解析器则采用...

    安卓Android源码——比较通用的xml解析方法.rar

    本资料包“安卓Android源码——比较通用的xml解析方法”将深入探讨在Android平台上解析XML的多种方法。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,创建一个树形结构,便于遍历和...

Global site tag (gtag.js) - Google Analytics