黑马程序员——java解析XML文件(SAX解析 和 DOM解析)

本文将介绍如何使用Java的DOM4J库解析XML文件,包括SAX解析方法和DOM解析方法。通过实例演示解析过程,详细解释如何获取XML文档的根节点、元素及属性值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——

-这里写代码片 ## Java中解析xml文件 ##

第一讲 用SAXReader解析 SAX 解析 xml文件也是最常用的

准备xml文件
XML配置文件

java解析

package com.kaka.util;

import java.io.File;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.XMLReader;

/**
* @author Administrator
*
*java中解析xml文件——dom4j
*
*工具 dom4j 驱动包
*
*/
public class Dom4jParseXML {
//main函数
public static void main(String[] args) {
parseXML(“Product.xml”);
}

//用dom4j解析xml文件的方法
private static void parseXML(String name) {
    // TODO Auto-generated method stub
    //先创建一个file文件对象,解析的目标文件
    File ff=new File(name);
    //创建xml解析器,SAX解析器
    SAXReader sr=new SAXReader();

    try {
        //用解析器开始解析file文件,获取xml文档
        Document read = sr.read(ff);
        //获取文档的根节点  root
        Element rootElement = read.getRootElement();
        //把所有的元素放入迭代器中,获取元素的迭代器
        Iterator elementIterator = rootElement.elementIterator();
        //遍历这个迭代器,,循环出根节点里第一层子节点
        while(elementIterator.hasNext()){
            //获取根节点的第一个子节点
            Element next =(Element) elementIterator.next();
            //获取这个子节点的属性的值
            System.out.println(next.attributeValue("id"));
            //重复上面的动作,第一个子节点的下子节点的迭代器
            Iterator elementIterator2 = next.elementIterator();
            while(elementIterator2.hasNext()){
                //获取来的子节点
                Element next2 =(Element) elementIterator2.next();
                //打印出元素节点和文本节点
                System.out.println("username = "+next2.getName()+"password = "+next2.getText());
            }
        }

    } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

Dom标准解析xml

xml文件同上

第二讲dom解析xml文件 dom解析比较 没有SAX解析的方便 不过原理都是一样的

package com.kaka.util;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
* @author Administrator
*
* 最原始的解析xml文件
*
* dom解析xml
*
*/
public class DomParseXML {

       public static void main(String[] args) {
          domParseXML("Product.xml");
    }

    private static void domParseXML(String name) {
        // TODO Auto-generated method stub
        //创建文档解析器工厂
        DocumentBuilderFactory  dbf=DocumentBuilderFactory.newInstance();

        try {
            //创建xml文档解析器
            DocumentBuilder newDocumentBuilder = dbf.newDocumentBuilder();

            try {
                //根据文件名开始解析xml文件,到一部分开始同SAX解析一样了,获取文档对象
                //同SAX File ff=new File("Product.xml"); SAXReader  sr=new SAXReader();
                //等同与这一句 :Document  ee=sr.read(ff);
                Document parse = newDocumentBuilder.parse(name);
                //获取根节点,如果<root>节点存在多个话,所以用item(0),拿到root节点中第一个子节点,
                //同Element rootElement = read.getRootElement();  Iterator elementIterator = rootElement.elementIterator();
                NodeList childNodes = parse.getElementsByTagName("root").item(0).getChildNodes();
                //上面得到一个特殊的list集合,拿到集合的长度
                int len = childNodes.getLength();
                System.out.println("包括空白节点总共有多少个节点   长度 = "+len);
                //childNodas集合  遍历集合 ,拿出节点
                for(int i=0;i<len;i++){
                    //遍历的节点  <root>  的子节点中包括      空白节点和document节点
                    Node item1 = childNodes.item(i);
                    //的子节点中包括      空白节点和document节点,只要是元素节点才拿出来
                    //获取节点类型  getNodeType() 如果是元素节点  == Node.DOCUMENT_NODE
                    if(item1.getNodeType()==Node.ELEMENT_NODE){
                        System.out.println("拿到的user节点的名字:"+item1.getNodeName());

                        System.out.println("拿到的  user  id属性值:"+item1.getAttributes().getNamedItem("id").getNodeValue());
                        //拿到user节点所有节点
                        NodeList childNodes2 = item1.getChildNodes();
                        //拿到user下面的所有节点  其中也包括空节点  和  文档节点
                        int length2 = childNodes2.getLength();
                        System.out.println("user节点所有节点:"+length2);
                        //遍历出所有节点
                        for(int j=0;j<length2;j++){
                            //拿到节点
                            Node item2 = childNodes2.item(j);
                            if(item2.getNodeType()==Node.ELEMENT_NODE){
                                System.out.println("元素节点名字:"+item2.getNodeName());
                                System.out.println("元素节点的值:"+item2.getFirstChild().getNodeValue());
                            }
                        }

                        System.out.println("=======================================================================");
                    }
                }


            } catch (SAXException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值