XML 解析详解

来源:互联网 发布:iphone视频制作软件 编辑:程序博客网 时间:2024/06/16 03:46

XML DOM解析

import java.io.InputStream;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;public class DomNote {//DOM 解析XML 文件//拷贝后如果没有值,请修改程序中节点名称public static void main(String[] args) {try {// 1.创建解析器工厂对象DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();// DocumentBuilderFactory 使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。// DocumentBuilderFactory.newInstance 获取 DocumentBuilderFactory的新实例。// 2.由解析器工厂对象创建解析器对象DocumentBuilder db = dbf.newDocumentBuilder();// DocumentBuilder 定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML// 获取一个 Document。// 获取此类的实例之后,将可以从各种输入源解析 XML// newDocumentBuilder 使用当前配置的参数创建一个新的 DocumentBuilder 实例。// 读取xml文件的输入流InputStream in = DomNote.class.getClassLoader().getResourceAsStream("dog.xml");/** InputStream : 此抽象类是表示字节输入流的所有类的超类。 需要定义 InputStream* 的子类的应用程序必须始终提供返回下一个输入字节的方法。* * getClassLoader() : 类加载器 getResourceAsStream 返回读取指定资源的输入流。 参数:* name - 资源名称 返回:用于读取资源的输入流,如果无法找到资源,则返回 null*/// 3.由解析器对象对指定XML文件进行解析,构建相应DOM树,创建Document对象Document doc = db.parse(in);/** Document 接口表示整个 HTML 或 XML文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问。* 因为元素、文本节点、注释、处理指令等不能存在于 Document 的上下文之外,所以* Document接口还包含所需的创建这些对象的工厂方法。 所创建的 Node 对象具有 ownerDocument 属性,该属性将* Node对象与创建这些对象时的上下文所属的 Document 关联起来。* * parse(in): 将给定输入源的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。*/// 获取dog节点集合NodeList petList = doc.getElementsByTagName("dog");// NodeList 接口提供对节点的有序集合的抽象,没有定义或约束如何实现此集合。DOM 中的 NodeList 对象是活动的// getElementsByTagName 按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeListfor (int j = 0; j < petList.getLength(); j++) {Node dog = petList.item(j);// 返回petlist中第j个项// 读取id属性Element e = (Element) dog;/** Element对象 代表XML文档中的标签元素 继承自Node对象,是Node最主要的子对象* * Element对象的方法: getAttribute(String):返回标签中给定属性名称的属性的值* getElementsByTagName(String):返回具有给定标记名称的所有后代 Elements 的* NodeList*/// 获得id的值String id = e.getAttribute("id");System.out.println("id:" + id);//获得dog字节点集合NodeList clist = dog.getChildNodes();for (int i = 0; i < clist.getLength(); i++) {Node n = clist.item(i);if (n.getNodeType() == 1)// 元素节点{System.out.println(n.getNodeName() + ":   "+ n.getFirstChild().getNodeValue());}}System.out.println();}} catch (Exception e) {e.printStackTrace();}}}

0 0
原创粉丝点击