XML的DOM解析

前端之家收集整理的这篇文章主要介绍了XML的DOM解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

DOM解析XMl说白了其实就是用DOM把XML存储的数据转换成一棵树,通过节点以及节点之间的关系,把数据从XML文件中拿出来,为我所用,这样的一个过程,我们称之为“解析”。

一:XML与DOM

1:XML(eXtensible Markup Language)即可扩展标记语言,十一种简单的数据存储语言,使用一系列简单的标签描述数据,这些标签可以方便的建立。

特点:

独立于计算机平台,操作平台,编程语言来表示数据,以其简单性,可扩展性,交互性和灵活性在行业中获得广大的支持与采纳。

作用:

(1)数据存储:和数据库一样可以实现数据的持久化,但相比而言,数据的能力更强大一些,XML仅仅是极其简单的存储数据

(2)数据交换:在实际中,由于各种数据库的不同,那么他们之间的数据传递是一件让人头疼的事儿,可以使用XML的交换数据功能解决这个问题。把数据库A的数据转换成标准的XMl文件,然后数据库B从XMl文件中解析数据,给自己使用。

(3)数据配置:使用XML文件作为配置文件,灵活性高,可读性强

2:DOM

DOM(Document Object Model)即文档对象模型。XML将数据组织成一棵树,所以DOM就是对这颗树的整体描述,那么对数据的各种操作,都可以通过这个DOM来完成。

二:解析过程

先来看一个基本的XML文件吧。

  1. <?xml version="1.0" encoding="gbk"?>
  2. <bookstore>
  3. <book id="1">
  4. <title tid="1">Harry Potter</title>
  5. <author>J K Rowling</author>
  6. <year>2005</year>
  7. <price>29.99</price>
  8. </book>
  9. <book id="2">
  10. <title tid="2">Harry Potter</title>
  11. <author>J K Rowling</author>
  12. <year>2006</year>
  13. <price>39.99</price>
  14. </book>
  15. <book id="3">
  16. <title tid="1">明朝那些事儿</title>
  17. <author>当年明月</author>
  18. <year>2009</year>
  19. <price>19.99</price>
  20. </book>
  21. </bookstore>

XML文件的主要组成部分为元素,如图中的book元素,title元素等。元素可以具有属性(如book的id),可以具有子元素(如book的title子元素),我们就是通过元素与元素之间的关系来达到获数据的目的。

再来看看XML在内存中的DOM结构吧。

可见bookstore标签在XML文件中是根标签,很显然在这颗树中他也是根元素,这个根元素还有book子元素,book子元素有属性值id,在book元素下面还有title,author,year,price四个子元素,在这些元素下面还有文本元素,即值。那么怎么取得文本元素中的值呢?下面就开始我们的解析之旅吧。。。

◆解析的过程分析:

简单的拿上面的XMl文件来说,文件中有三个book节点元素,所以应想办法获得这三个节点,然后循环遍历每一个book节点里面的内容。比如第一个book节点有一个属性值,所以应取得他的id属性值,然后下面还有四个子元素,分别先获得各个子元素,然后取得各个子元素的属性值(如果有的话),然后在取得各个子元素的文本子元素,在取得各个文本子元素的值。

总之,它的的遍历过程简单来说顺序如下:

根元素-->根元素属性-->根元素下的一级子元素-->根元素下的一级子元素的属性-->根元素下的一级子元素的文本子元素-->根元素下的一级子元素的文本子元素的值-->。。。。。。

◆解析之中用到的两个方法

getElementsByTagName(元素节点名字):获得的是元素节点,如果它的下面还有子元素(或文本元素),那么由getFirstChild()取得

getAttributeNode(属性名字):用于取得属性属性直接有值,所以用getNodeValue()取值

◆具体的解析过程:

1得到DOM解析器的工厂实例

  1. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

2:从DOM工厂中得到DOM解析器

  1. DocumentBuilder db = dbf.newDocumentBuilder();

3:解析XML文档,得到一个Document,即DOM树

  1. Document doc = db.parse("e:/book.xml");

4: 得到所有节点的列表信息(因为有好多book)

  1. NodeList petList = doc.getElementsByTagName("book");

5:轮循书本信息

  1. for (int i = 0; i < petList.getLength(); i++) {
  2. // 得到book元素
  3. Element book = (Element) petList.item(i);
  4. // 得到book元素下的id属性的值
  5. String strId = book.getAttributeNode("id").getNodeValue();
  6. // 得到book下的title子元素节点下的子文本节点的值
  7. String strTitle = book.getElementsByTagName("title").item(0)
  8. .getFirstChild().getNodeValue();
  9. // 得到book下的title子元素节点
  10. Element title = (Element) book.getElementsByTagName("title")
  11. .item(0);
  12. // 得到title元素节点的tid属性节点的值
  13. String strTid = title.getAttributeNode("tid").getNodeValue();
  14. // 得到book元素节点的author属性节点的值
  15. String strAuthor = book.getElementsByTagName("author").item(0)
  16. .getFirstChild().getNodeValue();
  17. // 得到book元素节点的year属性节点的值
  18. String strYear = book.getElementsByTagName("year").item(0)
  19. .getFirstChild().getNodeValue();
  20. // 得到book元素节点的price属性节点的值
  21. String strPrice = book.getElementsByTagName("price").item(0)
  22. .getFirstChild().getNodeValue();
  23. System.out.println("ID:" + strId);
  24. System.out.println("标题:" + strTitle);
  25. System.out.println("标题ID:" + strTid);
  26. System.out.println("作者:" + strAuthor);
  27. System.out.println("出版日期:" + strYear);
  28. System.out.println("价格:" + strPrice);
  29. }

(友情提示:要抛出的异常)

结果:测试之前,在d盘上存一个book.xml文件

  1. XML文件book的初始化信息:
  2. ID:1
  3. 标题Harry Potter
  4. 标题ID1
  5. 作者:J K Rowling
  6. 出版日期:2005
  7. 价格:29.99
  8. ID:2
  9. 标题Harry Potter
  10. 标题ID2
  11. 作者:J K Rowling
  12. 出版日期:2006
  13. 价格:39.99
  14. ID:3
  15. 标题:明朝那些事儿
  16. 标题ID1
  17. 作者:当年明月
  18. 出版日期:2009
  19. 价格:19.99

DOM的文档解析先说到这里,我得去做编个代码。。。白咯

猜你在找的XML相关文章