原来一切都是有套路的

使用DOM解析XML文档步骤

1、创建解析器工厂对象 DocumentBuildFactory对象

2、由解析器工厂对象创建解析器对象,即DocumentBuilder对象

3、由解析器对象对指定XML文件进行解析,构建相应的DOM树,创建Document对象,生成一个Document对象

4、以Document对象为起点对DOM树的节点进行查询

5、使用Document的getElementsByTagName方法获取元素名称,生成一个NodeList集合,

6、遍历集合

实例代码如下:

package d0620;

import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException; /*
* 解析phones.xml文件
*/
public class ParseXML {
public static void main(String[] arg){
//1、创建解析器工厂对象 DocumentBuildFactory对象
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=null;
Document dom=null;
try {
//2、由解析器工厂对象创建解析器对象,即DocumentBuilder对象
db=dbf.newDocumentBuilder();
//3、由解析器对象对指定XML文件进行解析,构建相应的DOM树,创建Document对象,生成一个Document对象
dom=db.parse("phones.xml");
//4、以Document对象为起点对DOM树的节点进行查询
//得到所有brand节点信息,是个集合
/*
* getElementsByTagName(String tagname)
按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。
*/
NodeList brandlist=dom.getElementsByTagName("Brand");
//遍历所有brand
for(int i=0;i<brandlist.getLength();i++){
Node brand=brandlist.item(i);
//转成元素,获取brand的元素值
Element brandelement=(Element)brand;
String brandname=brandelement.getAttribute("name");
System.out.println(brandname);
//查找Type
NodeList typelist=brandelement.getChildNodes();
for(int j=0;j<typelist.getLength();j++){
Node typenode=typelist.item(j);
if(typelist.item(j) instanceof Element){
Element typename=(Element)typenode;
String typen=typename.getAttribute("name");
System.out.println("\t"+typen);
} }
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
System.out.println("解析结束");
} }
}

特别注意:

 if(typelist.item(j) instanceof Element){
Element typename=(Element)typenode;
String typen=typename.getAttribute("name");
System.out.println("\t"+typen);
}

如果不加判断,读取子节点时候,会把第一个和第二个和下一个换行的一些空格当作文本来处理,强制转换就会出错

Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredTextImpl cannot be cast to org.w3c.dom.Element
    at d0620.ParseXML.main(ParseXML.java:47)

JAva使用DOM读取XML数据(解析)的更多相关文章

  1. iOS - XML 数据解析

    前言 @interface NSXMLParser : NSObject public class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mar ...

  2. 二、Android XML数据解析

    XML,可扩展标记语言.可以用来存储数据,可以看做是一个小型的数据库,SharedPreference就是使用XML文件存储数据的,SQLite底层也是一个XML文件,而在网络应用方面,通常作为信息的 ...

  3. xml数据解析

    xml数据解析 在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.Kiss ...

  4. 关于C#对Xml数据解析

    首先进行简单说明Xml 与Html  和 XAML数据标签的差别. 1.Xml属于数据文本, 被设计为传输和存储数据,其焦点是数据的内容.它与json格式数据相似,可作为服务数据传输类型. 其中XML ...

  5. [drp 4] 使用dom4j,读取XML数据,保存至数据库

    导读:上篇文章介绍了用XML文件配置数据库的连接,然后通过读取XML文件连接数据库的内容,本篇博客介绍读取XML文件,进行数据持久化的操作.PS:从某种意义上来说,经过Scheme校正的XML文件,本 ...

  6. iOS开发——网络Swift篇&JSON与XML数据解析

    JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit)   一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...

  7. java通过dom读写xml文件

    java通过dom读写xml文件 要读的xml文件 <?xml version="1.0" encoding="GB2312"?><学生花名册 ...

  8. Java使用dom4j读取xml时报错:org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence

    1.Java使用dom4j读取xml时报错: org.dom4j.DocumentException: Error on line 2 of document  : Invalid byte 2 of ...

  9. 用php读取xml数据

    parser是php内置的一个用来处理xml的解析器,它的工作由三个事件组成:起始标签. 读取数据.结束标签. 也就是说在对xml进行处理的时候每当遇到起始标签.数据和结束标签的时候函数会做相应的动作 ...

随机推荐

  1. C/C++实践笔记 003

    数据结构与算法程序=数据结构+算法语言是一种工具语言工具(c,c++)--程序设计方法(面向过程.面向对象)——数据结构(二叉树.队列.栈.红黑树.链表……)——算法(快速排序算法.冒泡排序算法.选择 ...

  2. JavaScript Array

    1.常用方法 // 数组构造 var a = new Array(20); // 长度为20的数组 var b = new Array('red', 'blue', 'white'); var c = ...

  3. 【分布式协调器】Paxos的工程实现-Cocklebur状态转移

    集群中的主机经过选举过程由Looking状态变为了Leadering或Following状态.而这些状态之间转移的条件是什么呢?先来个直观的,上状态图. 图 4.1 Cocklebur选举过程中的状态 ...

  4. 项目分享五:H5图片压缩与上传

    一.简介 图片的压缩与上传,是APP里一个很常用的功能.我们来年看 ChiTuStore 是怎样做的.相关文件 App/Module/User/UserInfo.html,App/Module/Use ...

  5. 突破自我,开源NetWorkSocket通讯组件

    前言 在<化茧成蝶,开源NetWorkSocket通讯组件>发表之后,收到大家很多个star,在此感谢!更可贵的是,一些网友提出了许多好建议,经过一些时间的思考,决定将NetworkSoc ...

  6. .Net分布式异常报警系统-客户端及服务端API

    客户端 客户端的作用就是捕获未处理异常, 发送异常到服务端. 关于捕获未处理异常的方法参考 http://www.cnblogs.com/youring2/archive/2012/04/25/246 ...

  7. NPOI2.0学习(三)

    HSSFWorkbook wk = new HSSFWorkbook();//你用来操作的HSSFWorkbook的实例 ICellStyle cellStyle = wk.CreateCellSty ...

  8. C 语言学习的第 05 课:了解课程配套的平台

    在此之前,已经同授课老师沟通,确认课程的配套平台是Coding.net.对于大多数(甚至是全部)同学来说,这个平台应该是极其陌生的.不过不用担心,且还是娓娓道来. 定义:Coding.net是一个集代 ...

  9. Windows10易升下载

    为了更好的帮助用户快速跨版本升级windows,退出Windows易升!在线下载,更新安装!网速快的话需要半个小时搞定! 升级完毕,如股票感觉OK.记得清理C盘Windows.old文件 01.磁盘- ...

  10. 总有一天会NB的! SB一样的坚持会有NB一样的结果的!

    第一天: 1.背景图不显示,因为背景图片无法撑开div,所以必须自己设置div的高度哦! 2.div水平居中! A:margin-left:auto;margin-right:auto;  B: 父元 ...