前端之家收集整理的这篇文章主要介绍了
XML 解析详解,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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 的 NodeList
for (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();
}
}
}