XML解析之DOM解析技术案例
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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |