2025年4月26日 星期六 乙巳(蛇)年 正月廿七 夜 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > JSP

DOM解析XML

时间:12-04来源:作者:点击数:78

XML 结构是一种树型结构,处理步骤都差不多,Java 己经将它们封装成了现成的类库。目前流行的解析方法有三种,分别为 DOM、SAS 和 DOM4j。

DOM(Document Object Model,文档对象模型)是 W3C 组织推荐的处理 XML 的一种方式。它是一种基于对象的 API,把 XML 的内容加载到内存中,生成一个 XML 文档相对应的对象模型,根据对象模型,以树节点的方式对文档进行操作。下面用实例说明解析步骤。

【例 1】DOM 解析 XML 文件。

假设 user.xml 文件如下:

  • <?xml version="1.0" encoding="UTF-8"?>
  • <users>
  • <user country="中国">
  • <name>白真</name>
  • <english_name>baizhen</english_name>
  • <age>32</age>
  • <sex></sex>
  • <address state="北京">
  • <city>北京市</city>
  • <area>朝阳区</area>
  • </address>
  • <description>他是一个大学老师</description>
  • </user>
  • <user country="中国">
  • <name>李华华</name>
  • <english_name>lihuahua</english_name>
  • <age>30</age>
  • <sex></sex>
  • <address state="河北省">
  • <city>石家庄市</city>
  • <area>裕华区</area>
  • </address>
  • <description>她是一个律师</description>
  • </user>
  • </users>

编写解析类 JAXBDomDemo.java 的代码如下:

  • package com.eshore;
  • import java.io.File;
  • 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.Element;
  • import org.w3c.dom.Node;
  • import org.w3c.dom.NodeList;
  • import org.xml.sax.SAXException;
  • public class JAXBDomDemo
  • {
  • /**
  • *用dom解析XML文件
  • */
  • public static void main(String[] args)
  • {
  • //创建待解析的XML文件,并指定目标
  • File file=new File("F:\\users.xml");
  • //用单例模式创建DocumentBuilderFactory对象
  • DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
  • //声明一个DocumentBuilder对象
  • DocumentBuilder documentBuilder =null;
  • try
  • {
  • //通过DocumentBuilderFactory构建DocumentBuilder对象
  • documentBuilder=factory.newDocumentBuilder();
  • //DocumentBuilder解析xml文件
  • Document document=documentBuilder.parse(file);
  • //获得xml文档中的元素根元素
  • Element root=document.getDocumentElement();
  • //输出根元素的名称
  • System.out.println("根元素:"+root.getNodeName());
  • //获得根元素下的子节点
  • NodeList childNodes = root.getChildNodes();
  • //遍历根元素下的子节点
  • for(int i=0;i<childNodes.getLength();i++)
  • {
  • //获得根元素下的子节点
  • Node node=childNodes.item(i);
  • System.out.println("节点的名称为"+node.getNodeName());
  • //获得子节点的country属性值
  • String attributeV=node.getAttributes().getNamedItem("country").getNodeValue();
  • System.out.println(node.getNodeName()+"节点的country属性值为"+attributeV);
  • //获得node子节点下集合
  • NodeList nodeChilds=node.getChildNodes();
  • //遍历node子节点下集合
  • for(int j=0;j<nodeChilds.getLength();j++)
  • {
  • Node details=nodeChilds.item(j);
  • String name=details.getNodeName();
  • //判断如果是address元素,获取子节点
  • if("address".equals(name))
  • {
  • NodeList addressNodes=details.getChildNodes();
  • //遍历address元素子节点
  • for(int k=0;k<addressNodes.getLength();k++)
  • {
  • Node addressDetail=addressNodes.item(k);
  • System.out.println(node.getNodeName()+"节点的子节点"+name+"点的子节点"+
  • addressDetail.getNodeName()+" 节点内容为:"+addressDetail.getTextContent());
  • }
  • String addressAtt=details.getAttributes().getNamedItem("state").getNodeValue();
  • System.out.println(name+"节点的state属性值为"+addressAtt);
  • }
  • System.out.println(node.getNodeName()+"节点的子节点"+details.getNodeName()+
  • "节点的内容为:"+details.getTextContent());
  • }
  • }
  • }
  • catch(ParserConfigurationException e)
  • {
  • e.printStackTrace();
  • }
  • catch (IOException e)
  • {
  • e.printStackTrace();
  • }
  • catch (SAXException e)
  • {
  • e.printStackTrace();
  • }
  • }
  • }

上述代码详细地描述了解析步骤。通过上述代码,不难发现 DOM 解析 XML 时,主要有以下几步:

  • 创建 DocumentBuilderFactory 对象:
//用单例模式创建DocumentBuilderFactory对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newlnstance();
  • 通过 DocumentBuilderFactory 构建 DocumentBuilder 对象:
DocumentBuilder documentBuilder=factory.newDocumentBuilder();
  • DocumentBuilder 解析 xml 文件变为 Document 对象:
Document document=documentBuilder.parse(file);

取得 Document 对象之后就可以用 Document 中的方法获取 XML 数据了。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
上一篇:JDK 中的 XML API 下一篇:SAX解析XML
推荐内容
相关内容
栏目更新
栏目热门