博客
关于我
XML的DOM解析 Java实现 使用递归解析一个XML文档
阅读量:433 次
发布时间:2019-03-06

本文共 2854 字,大约阅读时间需要 9 分钟。

 

XML的DOM解析 Java实现 使用递归解析一个XML文档

 

  本文是一个练习程序,程序解析了一个XML文档,并将其原样输出在命令行上。

  因为要把程序设计成适用于任何XML文档,所以需要使用递归,其中还必须加入元素类型的判断。

  详见程序:

  本文使用的XML文档:

 

<学生名册 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nonamespaceschemalocation="C:\Course30\student.xsd">
<学生 学号="1">
<姓名>
张三
<性别>
<年龄>
20
<学生 学号="2">
<姓名>
李四
<性别>
<年龄>
19
<学生 学号="3">
<姓名>
王五
<性别>
<年龄>
21

 

 

  Java程序:

 

package com.learnjava.xml.dom;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Attr;import org.w3c.dom.Comment;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;/** * 使用递归解析一个XML文档并且将其内容输出到命令行上 *  */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"));        // 获取根元素节点        Element root = doc.getDocumentElement();        parseElement(root);    }    private static void parseElement(Element element)    {        String tagName = element.getNodeName();        System.out.print("<" + tagName);        // element元素的所有属性构成的NamedNodeMap对象,需要对其进行判断        NamedNodeMap map = element.getAttributes();        // 如果存在属性,则打印属性        if (null != map)        {            for (int i = 0; i < map.getLength(); i++)            {                // 获得该元素的每一个属性                Attr attr = (Attr) map.item(i);                // 属性名和属性值                String attrName = attr.getName();                String attrValue = attr.getValue();                // 注意属性值需要加上引号,所以需要\转义                System.out.print(" " + attrName + "=\"" + attrValue + "\"");            }        }        // 关闭标签名        System.out.print(">");        // 至此已经打印出了元素名和其属性        // 下面开始考虑它的子元素        NodeList children = element.getChildNodes();        for (int i = 0; i < children.getLength(); i++)        {            // 获取每一个child            Node node = children.item(i);            // 获取节点类型            short nodeType = node.getNodeType();            if (nodeType == Node.ELEMENT_NODE)            {                // 如果是元素类型,则递归输出                parseElement((Element) node);            }            else if (nodeType == Node.TEXT_NODE)            {                // 如果是文本类型,则输出节点值,及文本内容                System.out.print(node.getNodeValue());            }            else if (nodeType == Node.COMMENT_NODE)            {                // 如果是注释,则输出注释                System.out.print("
"); } } // 所有内容处理完之后,输出,关闭根节点 System.out.print("
"); }}

 

 

 

 

参考资料

  圣思园张龙老师视频教程。

  Java官方文档:

转载地址:http://ldqyz.baihongyu.com/

你可能感兴趣的文章
[网站公告]又拍云API故障造成图片无法上传(已恢复)
查看>>
上周热点回顾(6.9-6.15)
查看>>
.NET跨平台之旅:借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息
查看>>
上周热点回顾(5.9-5.15)
查看>>
上周热点回顾(1.23-1.29)
查看>>
云计算之路-阿里云上:14:20-14:55博客后台2台服务器都CPU 100%引发的故障
查看>>
【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
查看>>
Python 简明教程 --- 20,Python 类中的属性与方法
查看>>
QBlog V2.5 源码开放下载(ASP.NET 番外系列之开端)
查看>>
稀疏数组
查看>>
Android MediaPlayer setDataSource failed
查看>>
虚拟机搭建hadoop环境
查看>>
DataStax Bulk Loader教程(四)
查看>>
Hibernate入门(四)---------一级缓存
查看>>
[Python学习笔记]组织文件
查看>>
快服务流量之争:如何在快服务中占领一席之地
查看>>
Spring Boot 2.x基础教程:构建RESTful API与单元测试
查看>>
WinUI 3 Preview 3 发布了,再一次试试它的性能
查看>>
使用命令把SpringBoot项目打包成可运行的jar包(简洁,操作性强)
查看>>
dojo/request模块整体架构解析
查看>>