Java代码:

package com.xushouwei.xml;

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;

/**

* DOM解析XML数据

* 原理:

* DOM解析(Document Object Mode)是一种基于对象的API,它把XML的内容加载到内存中,生成一个与XML文档内容相应的对象模型,当解析完成时候,内存中会生成与XML文档结构对应的DOM树象树,这样便能够根据树的结构,以节点形式来对文档进行操作。

* @author徐守威

*

*/

publicclass DomDemo {

publicstaticvoid main(String[] args) {

//创建解析XML文档对象,其保存在E盘的根目录下的article.xml

File xmlFile=new File("E:\\article.xml");

//声明一个DocumentBuilder对象,抽象类不能直接构建,可以通过DocumengBuilderFactory来构建,DocumentBuilder就是留创建Document用的啦

DocumentBuilder builder=null;

//声明一个DocumentBuilderFactory对象,抽象类,通过单例模式创建,DocumentBuilderFactory可以生产DocumentBuilder对象,就可以根据需求去解析已有xml文件(parse)或者创建新的document文件(newDocument)。

DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();

try {

//从工厂中创建DocumentBuilder对象

builder=builderFactory.newDocumentBuilder();

//创建Document对象使用DocumentBuilder解析xml文件,这在里我们已经在内存中形成一个文档对象模型,接下来我们就要对文档模型进行一一解析

Document document=builder.parse(xmlFile);

//首先我们要获取根元素,这里我们使用Element对象作为元素对象

Element root= document.getDocumentElement();

//打印根元素名称

System.out.println("根元素名称root:"+root.getNodeName());

//获取根元素下面的子节点,返回成节点集合数组对象

NodeList childNodes=root.getChildNodes();

//遍历子节点并对每个子节点进行判断

for(int i=0;i<childNodes.getLength();i++)

{

//从节点集合数组对象中获取每个节点,并返回真正的节点对象

Node node=childNodes.item(i);

//对每个子节点记性判断

if("article".equals(node.getNodeName()))

{

//如果节点名称为article,则输出article元素属性category

System.out.println("\r\n找到一篇文章,所属分类:"+node.getAttributes().getNamedItem("category").getNodeValue()+".");

//获取article节点下的子节点,并返回节点集合数组对象

NodeList nodeDetail=node.getChildNodes();

//循环遍历article节点下面的子节点

for(int j=0;j<nodeDetail.getLength();j++)

{

//从子节点集合数组对象中获取具体节点,并返回节点对象

Node detail=nodeDetail.item(j);

//获取article元素下的每个子节点

if("title".equals(detail.getNodeName()))

{

//输出tile

System.out.println("标题:"+detail.getTextContent());

}

elseif("author".equals(detail.getNodeName()))

{

//输出author

System.out.println("作者:"+detail.getTextContent());

}

elseif("email".equals(detail.getNodeName()))

{

//输出email

System.out.println("邮件:"+detail.getTextContent());

}

elseif("date".equals(detail.getNodeName()))

{

//输出author

System.out.println("日期:"+detail.getTextContent());

}

}

}

}

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

}

XML代码:

<?xml version="1.0" encoding="GB2312"?>

<articles>

<article category="Android">

<title>Android学习之路</title>

<author>徐守威</author>

<email>shouweixu@foxmail.com</email>

<date>2016-05-20</date>

</article>

<article category="JavaWeb">

<title>JavaWeb学习笔记</title>

<author>Jasxu</author>

<email>shouweixu@qq.com</email>

<date>2016-05-21</date>

</article>

</articles>

XML解析之DOM解析技术案例的更多相关文章

  1. Java---XML的解析(1)-DOM解析

    本章只讲DOM解析.接下来还会学习Dom4j和StAX 解析技术 DOM解析: DOM解析一次将所有的元素全部加载到内存中:如有以下XML文档: <user> <name>Ja ...

  2. XML解析(一) DOM解析

    XML解析技术主要有三种: (1)DOM(Document Object Model)文档对象模型:是 W3C 组织推荐的解析XML 的一种方式,即官方的XML解析技术. (2)SAX(Simple ...

  3. android XML解析之DOM解析方式

    DOM 解析方式步骤: 第一步:首选需要获得DOM解析器工厂实例 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ...

  4. xml的SAX解析和dom解析的区别

    一,区别 DOM解析 SAX解析 原理: 一次性加载xml文档,不适合大容量的文件读取 原理: 加载一点,读取一点,处理一点.适合大容量文件的读取 DOM解析可以任意进行增删改成 SAX解析只能读取 ...

  5. Java解析XML文档——dom解析xml

    一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...

  6. xml解析之----DOM解析

    DOM模型(documentobject model) •DOM解析器在解析XML文档时,会把文档中的全部元素.依照其出现的层次关系.解析成一个个Node对象(节点). •在dom中.节点之间关系例如 ...

  7. XML文件解析之DOM解析

    XML文件是一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.基本的解析方式包括DOM解析和SAX解析,具体来说包括DOM解析,SAX解析,DOM4J解 ...

  8. 2.3 使用 dom4j 对 xml文件进行 dom 解析

    // 使用dom4j对XML文档进行解析 CRUD public class Demo1 { //读取XML文档中第二本书的书名 <书名>javaWEB</书名> @Test ...

  9. java拾遗1----XML解析(一) DOM解析

    XML解析技术主要有三种: (1)DOM(Document Object Model)文档对象模型:是 W3C 组织推荐的解析XML 的一种方式,即官方的XML解析技术. (2)SAX(Simple ...

随机推荐

  1. codeforces div2 677 D

    http://codeforces.com/problemset/problem/677/D 题目大意: 给你一个n*m的图,上面有p种钥匙(p<=n*m),每种钥匙至少有一个,期初所有为1的钥 ...

  2. 从零深入 tomcat

    1.tomcat的安装使用 tomcat是实现了J2EE标准的最简单轻巧的WEB服务器,所以使用tomcat必须安装JDK咯! ① 安装JDK并设置环境变量: ②设置tomcat的环境变量: 这两小步 ...

  3. POJ 3660 Cow Contest 弗洛伊德

    题意难懂是POJ的标配,这都TM赖本泽马. 题意:有N头牛进行了M场比赛,比赛双方是A - B 且总是A赢(前面的那个数赢),如果说A赢B,B赢C 则可以确定A赢C.问最终多少头牛的排名可以确定. 思 ...

  4. myeclipse导出javadoc时特殊字符 尖括号

    源字符<?xml version="1.0" encoding="UTF-8" standalone="yes"?> javad ...

  5. (转)Hadoop MapReduce链式实践--ChainReducer

    版本:CDH5.0.0,HDFS:2.3.0,Mapreduce:2.3.0,Yarn:2.3.0. 场景描述:求一组数据中按照不同类别的最大值,比如,如下的数据: data1: A,10 A,11 ...

  6. PAT (Advanced Level) 1074. Reversing Linked List (25)

    简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...

  7. Posix消息队列实现机制

    本文是对<Unix 网络编程 卷2:进程通信>的笔记. 引言 消息队列是进程间通信的一种方式,可是如果不理解他的实现原理,会有众多不理解之处,下面就结合本书中的例子,对posix消息队列来 ...

  8. makefile里有哪些target?

    make help or grep ^[a-z].*\:$ Makefile | sed s,:,,g

  9. STM32的优先级NVIC_PriorityGroupConfig的理解及其使用(转)

    源:http://blog.csdn.net/yx_l128125/article/details/9703843 写作原由:因为之前有对stm32 优先级做过研究,但是没时间把整理的东西发表,最近项 ...

  10. Codeforces #377 Div2

    打得还不错的一场CF,题目质量也很高,今后还要继续努力 A题: 题意:给定一个数k,让其乘一个最小的数,使乘得以后的数要不被10整除,要不减去r以后被10整除,求这个最小的数 #include < ...