(1)什么是Dom解析:
Dom解析(Document Object Mode)是一种基于对象的API,它把XML的内容加载到内存中,生成Dom对象树。这样便能根据树的结构,已节点形式对文档进行操作。解析XML文件要比解析字符串,解析Properties文件要复杂的多,需要建立不止一个工具类对象。
(2)简单示例
articles.xml
View Code
<articles> <article category="xml"> <title> XML 概述</title> <author>janet</author> <email>winfu@163.com</email> <date>20080801</date> </article > <article category="java"> <title> Java 基本语法</title> <author>janet</author> <email>winfu@163.com</email> <date>20080801</date> </article> </articles>
DomDemo.java
View Code
package TestFor0330; import java.io.File; 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; public class DomDemo { public static void main(String[] args) { // 创建解析的XML文档对象,其保存在根目录下的Article.xml文件 File xmlFile = new File("article.xml"); /* * Dom树解析方式 */ // 声明一个DocumentBuilder对象,抽象类不能直接创建,可以通过DocumentFactory来构建 DocumentBuilder builder = null; // 声明一个DocumentBuilderFactory对象,通过单例模式创建 DocumentBuilderFactory builderFactory = DocumentBuilderFactory .newInstance(); try { // 获取默认的newDocumentBuilder builder = builderFactory.newDocumentBuilder(); // 解析文件 Document document = builder.parse(xmlFile); // 获取根元素 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); // 对子节点进行判断 if ("article".equals(node.getNodeName())) { // 如果节点的名称为article // 输出article元素属性Category System.out.println("\r\n找到一篇文章。所属分类:" + node.getAttributes().getNamedItem("category") .getNodeValue() + "。"); NodeList nodeDetail = node.getChildNodes(); // 获取article的下一个节点 for (int j = 0; j < nodeDetail.getLength(); j++) { Node detail = nodeDetail.item(j); if ("title".equals(detail.getNodeValue())) { System.out.println("标题:" + detail.getTextContent()); } else if ("author".equals(detail.getNodeName())) { System.out.println("作者:" + detail.getTextContent()); } else if ("email".equals(detail.getNodeName())) { System.out.println("电子邮件:" + detail.getTextContent()); } else if ("date".equals(detail.getNodeName())) { System.out.println("发表日期:" + detail.getTextContent()); } } } } } catch (Exception e) { e.printStackTrace(); } } }
代码输出结果:
(3)代码分析
首先要通过以下三步创建XML文件对应的Document对象
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(xmlFile);
取得Document对象之后就可以通过Document的各种方法遍历整个xml内容了。