加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML 解析详解

发布时间:2020-12-16 08:29:19 所属栏目:百科 来源:网络整理
导读: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;publ

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();
}


}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读