XML第十五讲:使用递归与DOM解析任意的XML文档

本文深入探讨如何使用DOM解析器处理任意结构的XML文档,通过递归方式解析XML元素,包括获取节点类型、节点值和属性。示例展示了如何解析学生名册的XML数据,展示递归在解析复杂嵌套时的应用。
摘要由CSDN通过智能技术生成

    上一讲我们讲解了DOM解析XML文档,但是都是在XML文档已知的情况下进行解析,这一讲我们来讲解一下DOM解析任意的XML文档,而实现这种方式唯一的办法就是采用递归方式。

1. 我们继续对上一讲程序进行接下去的剖析

package com.ahuier.xml.dom;

import java.io.File;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomTest3 {
    public static void main(String[] args) throws Exception {
        
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        
        DocumentBuilder db =  dbf.newDocumentBuilder();
        
        Document doc = db.parse(new File("student.xml"));
      
      /*
       * 打印输出student.xml的一些版本信息、编码方式等
       * 输出:1.0、UTF-8、true
       */
//        System.out.println(doc.getXmlVersion());
//        System.out.println(doc.getXmlEncoding());
//        System.out.println(doc.getXmlStandalone());
        
        /*
         * 我们上一个例子是获得Document对象,然后获得NodeList,这会我们换一下,获得文档的根元素节点
         * 查看JDK文档中的Document的方法
         * 使用 Element getDocumentElement() 方法
         */
        Element root =  doc.getDocumentElement();
        System.out.println(root.getTagName());  //打印出:学生名册
        
        /*
         * 查看Element中的方法
         * 使用这个方法:NodeList getChildNodes() 
         * 它返回这个对象节点的所有孩子孩子的列表,如果这个节点没有孩子节点,则返回为空
         */
        
        NodeList list = root.getChildNodes();
        
      //注意这边打印为7个。为什么是7个呢? 因为XML默认为空格也算是一个节点的孩子节点,可以尝试把XML中元素之间的空格去掉验证
        System.out.println(list.getLength()); 
        for(int i = 0; i < list.getLength(); i++){
            
            //打印出这个节点的各个孩子节点的节点名称
            System.out.println(list.item(i).getNodeName());
            
        }
        
        System.out.println("-------- <1> ------------------------------ ");        
        for(int i = 0; i < list.getLength(); i++){
            Node n = list.item(i);
            System.out.println(n.getNodeType() + " : " + n.getNodeValue());
        }
    
        System.out.println("--------- <2> -------------------------------");
        for(int i = 0; i < list.getLength(); i++){
            Node n = list.item(i);
            System.out.println(n.getTextContent());  //表示得到文本的内容
        }
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值