Java眼中的XML--文件读取--1 应用DOM方式解析XML

初次邂逅XML:


需要解析的XML文件:


这里有两个book子节点。

1、如何进行XML文件解析前的准备工作,另外解析先获取book节点。


这个我后来看懂了:


这个Node的ELEMENT_NODE=1和上面是一样的。


2、使用DOM解析XML文件的属性名和属性值(分两种情况)

第一种,当属性个数是1~N个的时候:

 1 public class DOMTest {
 2  3 public static void main(String[] args) {
 4 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 5 try {
 6 DocumentBuilder db = dbf.newDocumentBuilder();
 7 Document d = db.parse("books.xml");
 8 //1、根据节点名book,获取节点集合  9 NodeList nodelist = d.getElementsByTagName("book");
10 //2、遍历集合中所有的元素(节点) 11 for (int i = 0; i < nodelist.getLength(); i++) {
12 Node node = nodelist.item(i);
13 //3、获取每个节点的属性集合,并输出属性的个数 14 NamedNodeMap attrMap = node.getAttributes();
15 System.out.println("属性的个数是:"+attrMap.getLength());
16 //4、遍历所有属性,并输出属性值 17 for (int j = 0; j < attrMap.getLength(); j++) {
18 Node attr = attrMap.item(j);
19 System.out.println(attr.getNodeName()+":"+attr.getNodeValue());
20  }
21  }
22 } catch (ParserConfigurationException e) {
23 // TODO Auto-generated catch block 24  e.printStackTrace();
25 } catch (SAXException e) {
26 // TODO Auto-generated catch block 27  e.printStackTrace();
28 } catch (IOException e) {
29 // TODO Auto-generated catch block 30  e.printStackTrace();
31  }
32  }
33 }


第二种,当节点属性值只有一个的时候,可以这样:

 1 public class DOMTest {
 2  3 public static void main(String[] args) {
 4 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 5 try {
 6 DocumentBuilder db = dbf.newDocumentBuilder();
 7 Document d = db.parse("books.xml");
 8 //1、根据节点名book,获取节点集合  9 NodeList nodelist = d.getElementsByTagName("book");
10 //2、遍历集合中所有的元素(节点),并强制转换为element 11 for (int i = 0; i < nodelist.getLength(); i++) {
12 Element node = (Element) nodelist.item(i);
13 String str = node.getAttribute("id");
14  System.out.println(str);
15  }
16 } catch (ParserConfigurationException e) {
17 // TODO Auto-generated catch block 18  e.printStackTrace();
19 } catch (SAXException e) {
20 // TODO Auto-generated catch block 21  e.printStackTrace();
22 } catch (IOException e) {
23 // TODO Auto-generated catch block 24  e.printStackTrace();
25  }
26  }
27 }


上面两种情况的对比归纳,理解的时候,脑子里要有XML节点的图:


3、使用DOM解析XML文件的节点名和节点值

再来看XML的代码:

 1 <?xml version="1.0" encoding="UTF-8"?>  2 <bookstore>  3 <book id="1"> 换行符算一个子节点,这里是第一个
 4 <name>冰与火之歌</name> 第二个换行符
 5 <author>乔治马丁</author> 第三个
 6 <year>2014</year> 第四个
 7 <price>89</price> 第五个,所以加上正儿八经的四个节点,一共9个子节点
 8 </book>  9 <book id="2"> 10 <name>安徒生童话</name> 11 <year>2004</year> 12 <price>77</price> 13 <language>English</language> 14 </book> 15 </bookstore>


下面进行解析子节点:

获取节点名


获取节点值:

因为一个节点转为Element类型之后,比如<name>冰火之歌</name>中,冰火之歌就不是该节点的值NodeValue而是该节点的子节点。


两种获取子节点的value:

时间: 2024-10-30 03:43:55

Java眼中的XML--文件读取--1 应用DOM方式解析XML的相关文章

dom-Java使用DOM方式解析XML,返回的Document对象为null

问题描述 Java使用DOM方式解析XML,返回的Document对象为null // 1.创建一个DocumentBuilderFactory DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); System.out.println("dbf:"+dbf); // 2.创建DocumentBuilder try { DocumentBuilder db = dbf.newDocumentBuilder(

Android应用中使用DOM方式解析XML格式数据的基本方法_Android

DOM比SAX更容易掌握,因为她没有涉及回调和复杂的状态管理,然而,DOM的实现常常将所有的XML节点保存在内存中,这样使的处理较大的文档效率低. XML基本的节点类型 node - DOM基本的数据类型 Element - 最主要处理的对象是Element Attr - 元素的属性 Text - 一个Element 或者Attr的实际内容 Document - 代表整个XML文档,一个Document对象通常也称为一颗DOM树   1.在src目录下新建一个android.xml <?xml

Android应用中使用DOM方式解析XML格式数据的基本方法

DOM比SAX更容易掌握,因为她没有涉及回调和复杂的状态管理,然而,DOM的实现常常将所有的XML节点保存在内存中,这样使的处理较大的文档效率低. XML基本的节点类型 node - DOM基本的数据类型 Element - 最主要处理的对象是Element Attr - 元素的属性 Text - 一个Element 或者Attr的实际内容 Document - 代表整个XML文档,一个Document对象通常也称为一颗DOM树   1.在src目录下新建一个android.xml <?xml

android编程之xml文件读取和写入方法_Android

本文实例讲述了android编程之xml文件读取和写入方法.分享给大家供大家参考.具体分析如下: 一.环境: 主机:WIN8 开发环境:Eclipse 二.说明: 1.打开sd卡中的xml文件,如果不存在,这新建一个,并写入默认配置 2.读取xml文件 三.xml文件格式: <?xml version="1.0" encoding="UTF-8" standalone="true"?> -<config> <titl

android编程之xml文件读取和写入方法

本文实例讲述了android编程之xml文件读取和写入方法.分享给大家供大家参考.具体分析如下: 一.环境: 主机:WIN8 开发环境:Eclipse 二.说明: 1.打开sd卡中的xml文件,如果不存在,这新建一个,并写入默认配置 2.读取xml文件 三.xml文件格式: <?xml version="1.0" encoding="UTF-8" standalone="true"?> -<config> <titl

cocos2dx3.x-Cocos3.x 移植到Android平台 xml文件读取出错,搞了两天了,大神们帮帮忙。求

问题描述 Cocos3.x 移植到Android平台 xml文件读取出错,搞了两天了,大神们帮帮忙.求 Cocos3.x 移植到Android平台 xml文件读取出错,搞了两天了,大神们帮帮忙.网上的代码也看完了,不顶用.想要个人来交流. 解决方案 顶起来,大神们,小弟今天是要离不开公司了.拜托了

java-C#中将double值变成二进制然后写入文件,Java中载入该文件读取此二进制double值时不正确

问题描述 C#中将double值变成二进制然后写入文件,Java中载入该文件读取此二进制double值时不正确 目前已定位到是因为C#中的byte范围是0到255,而java中byte值为-128到127导致的错误. 尝试过使用C#的sbyte来解决: bw1 = new BinaryWriter(new FileStream("C:UsersDELLDesktopSpatialIndexctest1.bin", FileMode.Create)); bw2 = new BinaryW

C#多个XML文件合并 然后生成一个新的XML文件代码怎么写

问题描述 读取多个xml文件然后合并生成一个新的XML文件代码怎么写大神给实际例子谢谢! 解决方案 解决方案二:没具体需求的?那我随便给你找个了啊解决方案三:本帖最后由 starfd 于 2015-11-04 12:36:49 编辑解决方案四:就是把所有的xml文件整合到一个里面解决方案五:那2楼的满足你了啊--就是读取出来然后Add给Root节点解决方案六:能发下具体代码例子吗解决方案七:2楼链接打开有具体代码--解决方案八:加我QQ远程帮我看看1587292914解决方案九:如果你的xml没

Android中使用PULL方式解析XML文件深入介绍_Android

一.基本介绍 Android中极力推荐xmlpull方式解析xml. xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自己获取xmlpull所依赖的类库,kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar. jar包下载网址 http://www.xmlpull.org/ http://kxml.sourceforge.net/ 二.例子 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 E