博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java眼中的XML--文件读取--1 应用DOM方式解析XML
阅读量:4574 次
发布时间:2019-06-08

本文共 3531 字,大约阅读时间需要 11 分钟。

初次邂逅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 block24             e.printStackTrace();25         } catch (SAXException e) {26             // TODO Auto-generated catch block27             e.printStackTrace();28         } catch (IOException e) {29             // TODO Auto-generated catch block30             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、遍历集合中所有的元素(节点),并强制转换为element11             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 block18             e.printStackTrace();19         } catch (SAXException e) {20             // TODO Auto-generated catch block21             e.printStackTrace();22         } catch (IOException e) {23             // TODO Auto-generated catch block24             e.printStackTrace();25         }26     }27 }
第二种 完整代码

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

 
 3、使用DOM解析XML文件的节点名和节点值
 再来看XML的代码:
1 
2
3
换行符算一个子节点,这里是第一个 4
冰与火之歌
第二个换行符 5
乔治马丁
第三个 6
2014
第四个 7
89
第五个,所以加上正儿八经的四个节点,一共9个子节点 8
9
10
安徒生童话
11
2004
12
77
13
English
14
15

 下面进行解析子节点:

获取节点名

 

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

转载于:https://www.cnblogs.com/goodboy-heyang/p/4743933.html

你可能感兴趣的文章
02_ListActive中响应事件 并LogCat输出
查看>>
doubleclick adx note
查看>>
Celery框架
查看>>
[c#]asp.net开发微信公众平台(4)关注事件、用户记录、回复文本消息
查看>>
[转载,感觉写的非常详细]DUBBO配置方式详解
查看>>
Android在Eclipse上的环境配置
查看>>
面向对象(五)
查看>>
android平台下使用点九PNG技术
查看>>
Python学习3,列表
查看>>
最长回文子串
查看>>
JAVA基础-JDBC(一)
查看>>
js中for和while运行速度比较
查看>>
算法第5章作业
查看>>
7.9 练习
查看>>
基于ArcGIS JS API的在线专题地图实现
查看>>
learnByWork
查看>>
lua 函数
查看>>
Git的基本命令
查看>>
四平方和
查看>>
第十八周 12.27-1.2
查看>>