加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析之DOM解析技术案例

发布时间:2020-12-16 02:23:05 所属栏目:百科 来源:网络整理
导读:Java代码: package com.xushouwei.xml; 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.Node; import

Java代码:

package com.xushouwei.xml;

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.Node;

import org.w3c.dom.NodeList;

/**

* DOM解析XML数据

* 原理:

* DOM解析(Document Object Mode)是一种基于对象的API,它把XML的内容加载到内存中,生成一个与XML文档内容相应的对象模型,当解析完成时候,内存中会生成与XML文档结构对应的DOM树象树,这样便能够根据树的结构,以节点形式来对文档进行操作。

* @author徐守威

*

*/

public classDomDemo {

public static void main(String[] args) {

//创建解析XML文档对象,其保存在E盘的根目录下的article.xml

FilexmlFile=newFile("E:article.xml");

//声明一个DocumentBuilder对象,抽象类不能直接构建,可以通过DocumengBuilderFactory来构建,DocumentBuilder就是留创建Document用的啦

DocumentBuilderbuilder=null;

//声明一个DocumentBuilderFactory对象,抽象类,通过单例模式创建,DocumentBuilderFactory可以生产DocumentBuilder对象,就可以根据需求去解析已有xml文件(parse)或者创建新的document文件(newDocument)

DocumentBuilderFactorybuilderFactory=DocumentBuilderFactory.newInstance();

try {

//从工厂中创建DocumentBuilder对象

builder=builderFactory.newDocumentBuilder();

//创建Document对象使用DocumentBuilder解析xml文件,这在里我们已经在内存中形成一个文档对象模型,接下来我们就要对文档模型进行一一解析

Documentdocument=builder.parse(xmlFile);

//首先我们要获取根元素,这里我们使用Element对象作为元素对象

Elementroot= document.getDocumentElement();

//打印根元素名称

System.out.println("根元素名称root"+root.getNodeName());

//获取根元素下面的子节点,返回成节点集合数组对象

NodeListchildNodes=root.getChildNodes();

//遍历子节点并对每个子节点进行判断

for(int i=0;i<childNodes.getLength();i++)

{

//从节点集合数组对象中获取每个节点,并返回真正的节点对象

Nodenode=childNodes.item(i);

//对每个子节点记性判断

if("article".equals(node.getNodeName()))

{

//如果节点名称为article,则输出article元素属性category

System.out.println("rn找到一篇文章,所属分类:"+node.getAttributes().getNamedItem("category").getNodeValue()+".");

//获取article节点下的子节点,并返回节点集合数组对象

NodeListnodeDetail=node.getChildNodes();

//循环遍历article节点下面的子节点

for(intj=0;j<nodeDetail.getLength();j++)

{

//从子节点集合数组对象中获取具体节点,并返回节点对象

Nodedetail=nodeDetail.item(j);

//获取article元素下的每个子节点

if("title".equals(detail.getNodeName()))

{

//输出tile

System.out.println("标题:"+detail.getTextContent());

}

elseif("author".equals(detail.getNodeName()))

{

//输出author

System.out.println("作者:"+detail.getTextContent());

}

elseif("email".equals(detail.getNodeName()))

{

//输出email

System.out.println("邮件:"+detail.getTextContent());

}

elseif("date".equals(detail.getNodeName()))

{

//输出author

System.out.println("日期:"+detail.getTextContent());

}

}

}

}

}catch(Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

}

XML代码:

<?xml version="1.0" encoding="GB2312"?> <articles> <article category="Android"> <title>Android学习之路</title> <author>徐守威</author> <email>shouweixu@foxmail.com</email> <date>2016-05-20</date> </article> <article category="JavaWeb"> <title>JavaWeb学习笔记</title> <author>Jasxu</author> <email>shouweixu@qq.com</email> <date>2016-05-21</date> </article> </articles>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读