Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,下面结合这个xml文件来进行dom解析。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <books>
  3. <book id="12">
  4. <name>thinking in java</name>
  5. <price>85.5</price>
  6. </book>
  7. <book id="15">
  8. <name>Spring in Action</name>
  9. <price>39.0</price>
  10. </book>
  11. </books>

然后结合一张图来发现dom解析时需要注意的地方

在这里当我们得到节点book时,也就是图中1所画的地方,如果我们调用它的getChildNodes()方法,大家猜猜它的子节点有几个?不包
括它的孙子节点,thinking in
java这种的除外,因为它是孙子节点。它总共有5个子节点,分别是图中2、3、4、5、6所示的那样。所以在解析时,一定要小心,不要忽略空白的地方。

然后看代码来解析book.xml文件

DomParseService.java

  1. import java.io.InputStream;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import javax.xml.parsers.DocumentBuilder;
  5. import javax.xml.parsers.DocumentBuilderFactory;
  6. import org.w3c.dom.Document;
  7. import org.w3c.dom.Element;
  8. import org.w3c.dom.NodeList;
  9. import org.w3c.dom.Node;
  10. import com.xtlh.cn.entity.Book;
  11. public class DomParseService {
  12. public List<Book> getBooks(InputStream inputStream) throws Exception{
  13. List<Book> list = new ArrayList<Book>();
  14. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  15. DocumentBuilder builder = factory.newDocumentBuilder();
  16. Document document = builder.parse(inputStream);
  17. Element element = document.getDocumentElement();
  18. NodeList bookNodes = element.getElementsByTagName("book");
  19. for(int i=0;i<bookNodes.getLength();i++){
  20. Element bookElement = (Element) bookNodes.item(i);
  21. Book book = new Book();
  22. book.setId(Integer.parseInt(bookElement.getAttribute("id")));
  23. NodeList childNodes = bookElement.getChildNodes();
  24. //          System.out.println("*****"+childNodes.getLength());
  25. for(int j=0;j<childNodes.getLength();j++){
  26. if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE){
  27. if("name".equals(childNodes.item(j).getNodeName())){
  28. book.setName(childNodes.item(j).getFirstChild().getNodeValue());
  29. }else if("price".equals(childNodes.item(j).getNodeName())){
  30. book.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));
  31. }
  32. }
  33. }//end for j
  34. list.add(book);
  35. }//end for i
  36. return list;
  37. }
  38. }

Book.java用来组装数据和盛放数据

  1. public class Book {
  2. private int id;
  3. private String name;
  4. private float price;
  5. public int getId() {
  6. return id;
  7. }
  8. public void setId(int id) {
  9. this.id = id;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public float getPrice() {
  18. return price;
  19. }
  20. public void setPrice(float price) {
  21. this.price = price;
  22. }
  23. @Override
  24. public String toString(){
  25. return this.id+":"+this.name+":"+this.price;
  26. }
  27. }

测试使用单元测试如下ParseTest.java

    1. public class ParseTest extends TestCase{
    2. public void testDom() throws Exception{
    3. InputStream input = this.getClass().getClassLoader().getResourceAsStream("book.xml");
    4. DomParseService dom = new DomParseService();
    5. List<Book> books = dom.getBooks(input);
    6. for(Book book : books){
    7. System.out.println(book.toString());
    8. }
    9. }
    10. }

Java Dom解析xml的更多相关文章

  1. 精讲 org.w3c.dom(java dom)解析XML文档

    org.w3c.dom(java dom)解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会 ...

  2. org.w3c.dom(java dom)解析XML文档

    位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析 ...

  3. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  4. Java从零开始学四十二(DOM解析XML)

    一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone ...

  5. Java解析XML文档(简单实例)——dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

  6. POPTEST老李分享DOM解析XML之java

    POPTEST老李分享DOM解析XML之java   Java提供了两种XML解析器:树型解释器DOM(Document Object Model,文档对象模型),和流机制解析器SAX(Simple ...

  7. Java解析XML文档——dom解析xml

    一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...

  8. Android之DOM解析XML

    一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...

  9. 简单谈谈dom解析xml和html

    前言 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.html,xml都是基于这个模型构造的.这也是一个W3C推出的标准.j ...

随机推荐

  1. 可以使用QT给龙芯开发软件

    直接apt-get install libqt5core5a就有了,也许是一个很好的小众市场机会呢 至于系统,可以使用debian mips https://www.debian.org/devel/ ...

  2. Flex中如何通过showAllDataTips属性使鼠标移动到图表时显示所有的数据Tips的例子

    原文 http://blog.minidx.com/2008/11/10/1616.html 接下来的例子演示了Flex中如何通过showAllDataTips属性,使鼠标移动到图表时显示所有的数据T ...

  3. 普林斯顿大学算法课 Algorithm Part I Week 3 归并排序 Mergesort

    起源:冯·诺依曼最早在EDVAC上实现 基本思想: 将数组一分为(Divide array into two halves) 对每部分进行递归式地排序(Recursively sort each ha ...

  4. Centos6.5升级gcc for qt5.3.1

    1.升级GCC CentOS6.5内置的GCC版本为4.4,而Qt5.2.1则需要4.8.2的支持(支持C++ 11特性),因此,必须先升级GCC wget http://ftp.tsukuba.wi ...

  5. WinForm 窗体与窗体相互嵌套

    只要将要被潜逃的的窗体的TopLeve设置为Flase即可像普通的控件一样,被添加到另外一个窗体中,TopLeve:是否为顶级窗口,下面来看代码: public partial class TTFor ...

  6. Cipher(置换群)

    Cipher Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20821   Accepted: 5708 Descripti ...

  7. Qemu之Network Device全虚拟方案二:虚拟网卡的创建

    上文针对Qemu在前端网络流路径的建立方面做了具体的描写叙述.数据包从Host的物理网卡经过Host Linux内核中的Bridge, 经过Tap设备到达了Qemu的用户态空间.而Qemu是怎样把数据 ...

  8. 一个tabBarController管理多个Storyboard

    随着项目的业务逻辑越来越复杂,随着项目越来越大,那么我们Storybard中得控制器就越来越多, 就越来越难以维护.然而使用Storyborad又能更方便的帮助我们做屏幕适配(PS:尤其在6.6+出来 ...

  9. Java基础学习笔记2

    运算符: 重点:++和--运算符; a++ (a--):表示先将a的原值带入计算,计算完毕后,再将a的值进行+1(-1); ++a (--a):先将a的值进行+1(-1)运算,然后将+1(-1)以后的 ...

  10. 自学Xpath的几个例子

    Xpath可以对XML文件中的信息进行查找,并对XML文件树形结构进行遍历.详细语法请转:http://www.w3school.com.cn/xpath/index.asp 例子:利用在JavaSc ...