使用dom解析
来源:互联网 发布:张佳玮nba知乎 编辑:程序博客网 时间:2024/05/18 03:22
什么是DOM和SAX ?
DOM Document Object Model —– 文档对象模型
DOM思想: 将整个xml 加载内存中,形成文档对象,所有对xml操作都对内存中文档对象进行
DOM 是官方xml解析标准
使用xml 存储和传输数据
1、通过程序生成xml
2、读取xml 中数据 —- xml 解析
1、创建 xml 文档 books.xml
在企业实际开发中,为了简化xml 生成和解析 —- xml 数据文件通常不使用约束的
2、使用DOM解析xml 将整个xml文档加载到内存中 : 工厂 — 解析器 — 解析加载
3、Document通过 getElementsByTagName 获得 节点集合 NodeList
通过 NodeList 提供 getLength 和 item 遍历 节点集合
DOM 编程思路小结
1,decumentBuliderFactory decumentbuilderfactory=decumentBuliderFactory.newinstance();
2.Document document=decumentbuilderfactory.parse();//装载XML文档 —- Document
3.Document 获得指定元素 —– getElementsByTagName (返回 NodeList)
Nodelist nodelist=document.getElementsByTagName(“标签名”)
4、遍历NodeList 获得 每个 Node
5、将每个Node 强制转换 Element
5、通过元素节点API 操作属性和文本内容
getAttribute 获得属性值
getTextContent 获得元素内部文本内容
首先我们必须创建xml文档,在这里,我们先创建了一个value的文件夹,然后在里面创建了Newfile.xml文档
其次创建java代码,
xml文档内容如下
<?xml version="1.0" encoding="UTF-8"?><books> <book> <name> 高效java </name> <pirce>50 </pirce> </book> <book> <name> java编程思想 </name> <pirce> 80 </pirce> </book></books>
//java代码如下
package com.effective_java;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class Model5 { public static void main(String[] args) { // TODO 自动生成的方法存根 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();//定义工厂api使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。 try { DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); //使用当前配置的参数创建一个新的 DocumentBuilder 实例。 Document document = documentBuilder.parse("value\\NewFile.xml"); //定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document。 //在这里,我们通过url创建 NodeList nodelist = document.getElementsByTagName("name");//按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。 for (int i = 0; i < nodelist.getLength(); i++) {//对nodellist进行遍历 Node node = nodelist.item(i);// 返回集合中的每一个项 Element element=(Element)node;//将node强转为element对象 element.gettextcontent();//获得标签内容 } // 下面我们查找java编程基础的价格 nodelist = document.getElementsByTagName("book"); for (int i = 0; i < nodelist.getLength(); i++) { Element element = (Element) nodelist.item(i); System.out.println(element.getTextContent()); if (element.getTextContent().equals("java编程思想")) { // 说明我们找到了这本书,在xml中我们发现价格是book的第四个节点(回车换行也是子节点) element = (Element) nodelist.item(3); System.out.println(element.getTextContent()); } /* * 这里面我们使用最常见的api就是 getElementsByTagName();通过节点的名称,我们可以 * 获得一个节点的nodelist,这个nodelist是一个节点的集合 * 通过getItem我们就可以得到具体的NOde对象 * *为了我更好的理解,我们将xml改写如下 *//** <books> <book> <name> 高效java </name> <pirce>50 </pirce> </book> <book> <name> java编程思想 </name> <pirce> 80 </pirce> </book> <book> <name type="计算机">深入了解java虚拟机</name> <price>60</price> <author> <name>周志明</name> <address>母鸡</address> </author> </book></books> */ //获得java虚拟机的作者的名字 /* * 分析:是name节点的子节点的孩子节点 */ Node node; NodeList child; Node Node1; //NodeList nodelist3; NodeList nodeList2=document.getElementsByTagName("name"); for(int i=0;i<nodeList2.getLength();i++){ node=nodeList2.item(i); if(node.getTextContent().equals("深入了解java虚拟机")){ System.out.println("正确"); Node1= node.getNextSibling().getNextSibling().getNextSibling().getNextSibling(); child=Node1.getChildNodes(); for(i=0;i<child.getLength();i++){ node=child.item(i); if(node.getNodeName().equals("name")){ System.out.println(node.getTextContent()); } } } } System.out.println(document.getAttributes());//属性 System.out.println(document.getBaseURI());//xml文件的地址 System.out.println(document.getNodeName());//节点名称 //Element和Node节点相同 //node=(Element)child.item(0); //document.getDocumentElement();可以直接获得文档元素的子节点 System.out.println(document.getDocumentElement().getNodeName()); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }}
**
//首先我们说明一下这几个类,
/*
DocumentBuilderFactory
定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
通过工厂我们可以拿到
DocuemtnBuilder实例
对于DocumentBuilder类,我们来看一下简介:
定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document。
此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取。获取此类的实例之后,
将可以从各种输入源解析 XML。这些输入源有 InputStreams、Files、URL 和 SAX InputSources。
注意,此类重用了 SAX API 中的一些类。这并不要求底层 DOM 实现的实现者使用 SAX 解析器将 XML 文档解析为 Document。
它仅要求该实现使用这些现有的 API 与应用程序交流。
DocumentBuilder获得Document对象有五种方式
当然我们在使用解析式是对文件解析,所以使用 Document parse(File f);
重点我们去看看Document类
文档的解释如下
Document 接口表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问。
因为元素、文本节点、注释、处理指令等不能存在于 Document 的上下文之外,所以 Document 接口还包含所需的创建这些对象的工厂方法。所创建的 Node 对象具有 ownerDocument 属性,该属性将 Node 对象与创建这些对象时的上下文所属的 Document 关联起来。
从这里我们可以看出Document提供了对html和xml文件节点的访问,同时提供了大量的api支持我们的操作
这就是最简单的实现方式
当时希望大家注意解析的方式是可以解析换行的,默认换行也是一个节点
在这里我们重点关注一下Node类和NodeLisst类的几个方法
NOde的几个重要的方法
getFirstChild() 此节点的第一个子节点。
getLastChild() 获得最后一个子节点
getAttributes() 获得节点属性
getChildNodes() 获得孩子节点返回Nodelist
getNextSibling() 获得下一个节点
getNodeValue() 获得节点的值
等等都能帮助我们查找指定的xml属性或节点
具体的自己大家查看api
再来看看Nodelist类中常见的方法getLength() 列表中的节点数。 item(int index) 返回节点 就两个api,这个就不用说明了 */
**
- 使用Dom解析XML
- DOM 解析器 使用
- 使用dom解析xml
- 使用DOM解析XML
- 使用DOM解析XML
- 使用dom解析
- java解析xml:使用DOM
- 使用DOM解析XML文件
- Android使用DOM解析xml
- 使用DOM解析XML文档
- 轻松使用dom解析xml
- JAVA使用DOM解析XML
- 使用DOM解析常用方法
- 使用DOM解析XML文档
- 使用Dom解析xml文件
- 使用JAXP进行DOM解析
- android使用dom解析xml
- 使用JAXP Dom解析xml
- CS231n官方笔记授权翻译总集篇发布
- Latex Tips
- 第三方库--EasyX函数枚举
- 【转】Harbor 私有仓库简单部署
- 编写一个由1-9组成的9位数,并且数字不重复,前N项能被N整除
- 使用dom解析
- BST 基础二叉排序树
- 如何有效坚持一件事
- e3mall Day05
- <Android 基础(四十四)> View事件分发机制
- 004 函数极限之自变量趋于有限值时的极限
- 005 函数极限之自变量趋于无穷大时的极限及函数性质之唯一性
- 【BZOJ1047】【HAOI2007】理想的正方形
- internal error: SHA-1 not available.