java解析xml之dom解析xml示例分享

 更新时间:2014年01月05日 09:47:34   作者:  
DOM将整个XML文件加载到内存中,并构建出节点树;应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点、属性等信息; 这种方式便于对XML节点的添加修改等,而且解析也很方便,然后它比较耗费内存,解析速度也不快,下面看使用示例吧

复制代码 代码如下:

package com.test;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomXML {

    public static void main(String[] args) {
        try {
            File file = new File("e:/People.xml"); 
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
            DocumentBuilder builder = factory.newDocumentBuilder();  
            Document document = builder.parse(file);  
            Element element = document.getDocumentElement();

            List<People> peopleList = new ArrayList<People>();
            NodeList peopleNodes = element.getElementsByTagName("People");
            for(int i=0;i<peopleNodes.getLength();i++){  
                People people = new People();
                Element peopleElement = (Element) peopleNodes.item(i);
                people.setId(peopleElement.getAttribute("id"));
                NodeList childPeopleNodes = peopleElement.getChildNodes();
                for(int j=0;j<childPeopleNodes.getLength();j++){
                    //DOM解析时候注意子节点前面的空格也会被解析
                    if(childPeopleNodes.item(j) instanceof Element){
                        Element childPeopleElement = (Element) childPeopleNodes.item(j);
                        if(childPeopleElement.getNodeType()==Node.ELEMENT_NODE){ 
                            if(childPeopleElement.getNodeName().equals("Name")){
                                people.setEnglishName(childPeopleElement.getAttribute("en"));
                                people.setName(childPeopleElement.getTextContent());
                            }
                            else if(childPeopleElement.getNodeName().equals("Age")){
                                people.setAge(childPeopleElement.getTextContent());   
                            }
                        }
                    }
                }
                peopleList.add(people);
            }

            for(People people : peopleList){
                System.out.println(people.getId()+"\t"+people.getName()+"\t"+people.getEnglishName()+"\t"+people.getAge());
            }

        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

       
    }
}

相关文章

  • 浅谈JVM系列之从汇编角度分析NullCheck

    浅谈JVM系列之从汇编角度分析NullCheck

    在virtual call中执行nullcheck的时候,如果已经知道传递的参数是非空的。JIT会对代码进行优化吗?本文将详细介绍JVM系列之从汇编角度分析NullCheck。
    2021-06-06
  • 详解Java阻塞队列(BlockingQueue)的实现原理

    详解Java阻塞队列(BlockingQueue)的实现原理

    这篇文章主要介绍了详解Java阻塞队列(BlockingQueue)的实现原理,阻塞队列是Java util.concurrent包下重要的数据结构,有兴趣的可以了解一下
    2017-06-06
  • 详解Java8中接口的默认方法和静态方法

    详解Java8中接口的默认方法和静态方法

    Java 8是Java语言的一个重要版本,其中引入了许多新特性和改进,其中一个值得关注的特性是接口的默认方法和静态方法,本文就来和大家简单讲讲吧
    2023-05-05
  • 浅谈Java编程中的synthetic关键字

    浅谈Java编程中的synthetic关键字

    这篇文章主要介绍了浅谈Java编程中的synthetic关键字的相关内容,包括其简单的介绍和实例,需要的朋友可以了解下。
    2017-09-09
  • 关于swagger配置及踩坑@Api参数postion无效解决接口排序问题

    关于swagger配置及踩坑@Api参数postion无效解决接口排序问题

    这篇文章主要介绍了关于swagger配置及踩坑@Api参数postion无效解决接口排序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • SpringMVC之AbstractAnnotationConfigDispatcherSer解读

    SpringMVC之AbstractAnnotationConfigDispatcherSer解读

    这篇文章主要介绍了SpringMVC之AbstractAnnotationConfigDispatcherSer,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 使用java操作elasticsearch的具体方法

    使用java操作elasticsearch的具体方法

    本篇文章主要介绍了使用java操作elasticsearch的具体方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Java中的XML解析技术详析

    Java中的XML解析技术详析

    XML文档是一个文档树,从根部开始,并扩展到树的最底部,下面这篇文章主要给大家介绍了关于Java中XML解析技术的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • java实现图片缩放、旋转和马赛克化

    java实现图片缩放、旋转和马赛克化

    这篇文章主要为大家详细介绍了java实现图片缩放、旋转和马赛克化,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 在Java中自由块的执行顺序

    在Java中自由块的执行顺序

    java中的自由块分为静态的自由块和非静态的自由块。非静态自由块的执行时间是:在执行构造函数之前。静态自由块的执行时间是:class文件加载时执行。
    2013-04-04

最新评论