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();
        }

       
    }
}

相关文章

  • JAVA中方法的声明及使用方式(继承、多态、封装)

    JAVA中方法的声明及使用方式(继承、多态、封装)

    这篇文章主要介绍了JAVA中方法的声明及使用方式(继承、多态、封装),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Java 找不到或无法加载主类的修复方法

    Java 找不到或无法加载主类的修复方法

    这篇文章主要介绍了Java 找不到或无法加载主类的修复方法,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-02-02
  • 一文带你掌握Java LinkedBlockingQueue

    一文带你掌握Java LinkedBlockingQueue

    LinkedBlockingQueue 是一个可选有界阻塞队列,这篇文章主要为大家详细介绍了Java中LinkedBlockingQueue的实现原理与适用场景,感兴趣的可以了解一下
    2023-04-04
  • Java基础之线程锁相关知识总结

    Java基础之线程锁相关知识总结

    今天给大家带来的是关于Java线程的相关知识,文章围绕着Java线程锁展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Java StringBuffer与StringBuilder有什么区别

    Java StringBuffer与StringBuilder有什么区别

    当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder类,和String类不同的是,StringBuffer和 StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象,本篇我们来分析分析它们的区别
    2023-01-01
  • Java for循环的妙用之鸡兔同笼问题

    Java for循环的妙用之鸡兔同笼问题

    这篇文章主要给大家介绍了关于Java for循环的妙用之鸡兔同笼问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java反射机制在Spring IOC中的应用详解

    Java反射机制在Spring IOC中的应用详解

    这篇文章主要介绍了Java反射机制在Spring IOC中的应用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 浅谈一下Java线程组ThreadGroup

    浅谈一下Java线程组ThreadGroup

    ThreadGroup是为了方便线程管理出现了,可以统一设定线程组的一些属性,比如setDaemon,设置未处理异常的处理方法,设置统一的安全策略等等,需要的朋友可以参考下
    2023-05-05
  • Java 详解包装类Integer与int有哪些共通和不同

    Java 详解包装类Integer与int有哪些共通和不同

    这篇文章主要介绍的是 Java中int和Integer的区别,Java 是一种强数据类型的语言,因此所有的属性必须有一个数据类型,下面文章基于Java详细int和Integer有何区别,需要的朋友可以参考一下
    2022-04-04
  • Spring @Profile注解实现多环境配置

    Spring @Profile注解实现多环境配置

    这篇文章主要介绍了Spring @Profile注解实现多环境配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论