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

框架源码深入需要准备的知识之解析XML

发布时间:2020-12-16 06:07:03 所属栏目:百科 来源:网络整理
导读:1.DOM解析XML DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document document = documentBuilder.parse(new FileInputStream

1.DOM解析XML

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

Document document = documentBuilder.parse(new FileInputStream(file));

得到的Document对象就是XML文档对象的实体

NodeList nodeList = document.getElementsByTagName("book");

得到标签名称是book的节点集合

Node和Element的区别:

node和Element是两个领域的概念。


NODE是相对TREE这种数据结构而言的。TREE就是由NODE组成。这个部分你可以参考离散数学的树图。


ELEMENT则是XML里的概念,<xxx>就是元素,是XML中的数据的组成部分之一。

元素(Element)和结点(Node)的区别,元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,

例如<div>...</div>。但是一个结点不一定是一个元素,而一个元素一定是一个结点。

举例来说:

<book class="Hello World 2">

<name scope="test">Spring in Action</name>

<price scope="dev">39.0</price>

</book>

这整个可以理解为一个Element ,但是如果使用geiChildNode 发现有5个Node,分别是<name></name>,<price></price>,Spring in Action,39.0 </book>

代码实例如下:

NodeList nodeList = document.getElementsByTagName("book");


for (int i = 0; i < nodeList.getLength(); i++) {

Node node = nodeList.item(i);

Element element = (Element) node;

System.err.println(element.getAttribute("class"));

NodeList nodeList2 = element.getElementsByTagName("price");

System.err.println(((Element) (nodeList2.item(0))).getAttribute("scope"));

}

//for (int i = 0; i < nodeList.getLength(); i++) {

Node node = nodeList.item(i);

System.err.println(node.getChildNodes().getLength());

}

打印的结果是5

NodeList child = node.getChildNodes();

for (int j = 0; j < child.getLength(); j++) {

System.err.println(child.item(j).getNodeType() + "node Type");

}

打印结果依次为:

3node Type

1node Type

3node Type

1node Type

3node Type

可以验证我们想要表达的


2.SAX解析XML文件


重要的一点:EntityResolver 这个究竟是为了干什么 :http://www.cnblogs.com/mjorcen/p/3642855.html这个文章有详细的解释

继承DefaultHandler 这个类 主要重载以下方法就可以实现一些类似的操作:

startDocument :XML解析开始

endDocument:XML解析结束

startElement:解析元素开始

endElement:解析元素结束

characters:获取节点中间文字内容

(编辑:李大同)

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

    推荐文章
      热点阅读