原来一切都是有套路的

使用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. 如何配置多个ssh key

    上一篇简单学习了下怎样利用git bash上传文件到指定的github项目中,我们来回顾下.首先在本地安装好git,设置好用户名和邮箱(提交时的显示),接着我们生成SSH key把它添加到该项目own ...

  2. 国内网站常用的一些 CDN 公共库加速服务

    CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速.一 般的CDN公共库都会包含全球所有最流行的开源JavaScri ...

  3. WebBrowser与IE的关系,如何设置WebBrowser工作在IE9、10、11模式下?

    Web Browser Control – Specifying the IE Version http://www.west-wind.com/weblog/posts/2011/May/21/We ...

  4. Adobe Reader & PDF 护眼设置

    1.首先选择“编辑”--->“首选项” 选择其他颜色,把RGB如下设置

  5. 通过UserAgent判断设备为Android、Ios、Pc访问

    public static bool CheckAgent() { bool flag = false; string agent = HttpContext.Current.Request.User ...

  6. UEFI与MBR区别

     EFI与MBR启动的区别 大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘 ,更快速的启动win ...

  7. redis的主从复制,读写分离,主从切换

    当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能. redis提供了一个master,多个s ...

  8. Using LINQ to SharePoint

    LINQ and LINQ Providers   LINQ is a feature of the programming languages C# and Microsoft Visual Bas ...

  9. jax-ws开发总结

    服务端开发步骤: 1.定义SEI,即java中的接口 2.定义SEI的实现类,使用@webservice注解标记它是一个webservice服务类 3.发布服务 客户端开发步骤:使用jdk的servi ...

  10. context:component-scan扫描使用的use-default-filters

    如下方式可以成功扫描到@Controller注解的Bean,不会扫描@Service/@Repository的Bean. <context:component-scan base-package ...