DOM解析器
Qt中使用DOM对XML进行的各种解析

Qt中使用DOM对XML进行的各种解析(总结)前几天因为底层拓扑结构发生了变化,导致拓扑文件发生了变化,我负责的对于拓扑文件的解析操作自然也就要推到重来。
利用上个周末的时间,把这个任务搞定了,顺便也利用这个时间好好总结下这次学到的知识。
我们知道,QT中对于XML文件的读写无非就两种方式,DOM和SAX,两种方法的具体介绍如下:/***************************************我是传说中的分割线**************************************************************/用于读取和操作XML 文件的标准是文档对象模型DOM。
DOM为XML 文档的已解析版本定义了一组接口。
解析器读入整个文档,然后构建一个驻留内存的树结构,然后您的代码就可以使用DOM 接口来操作这个树结构。
您可以遍历树以了解原始文档包含了什么,您可以删除树的几个部分,还可以重新排列树和添加新的分支,等等。
遗憾的是,因为DOM 方法涉及读取整个文件并将该文件存储在一个树结构中,而这样可能是低效的、缓慢的,并且很消耗资源:DOM 构建整个文档驻留内存的树。
如果文档很大,就会要求有极大的内存。
DOM 创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。
如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。
DOM 解析器必须在您的代码取得控制权之前读取整个文档。
对于非常大的文档,这会引起显著的延迟。
这些仅仅是由文档对象模型的设计引起的问题;撇开这些问题,DOM API 是解析XML 文档非常有用的方法。
一种替代技术就是SAX。
相比于文档对象模型DOM,SAX 是读取和操作XML 数据的更快速、更轻量的方法。
SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。
它不涉及DOM所必需的开销和概念跳跃。
SAX API是一个基于事件的API,适用于处理数据流,即随着数据的流动而依次处理数据。
java xmlparser用法

文章标题:深入探讨Java XML解析器的使用方法与技巧一、引言:解析XML在Java中的重要性XML作为一种可扩展的标记语言,被广泛应用于数据交换和存储的场景中。
在Java开发中,对XML的解析是一项非常常见的任务,它涉及到从XML文档中提取数据、修改数据以及创建新的XML文档等方面。
对于Java开发者来说,掌握XML解析器的使用方法与技巧是非常重要的。
二、Java中常见的XML解析器介绍在Java中,常见的XML解析器主要包括DOM解析器、SAX解析器和StAX解析器。
下面将针对这三种解析器进行详细介绍,并分别分析它们的优缺点和适用场景。
1. DOM解析器DOM(Document Object Model)解析器将整个XML文档解析成内存中的一个树形结构,因此适合于对XML文档进行随机访问和修改。
但是,由于DOM解析器需要将整个文档加载到内存中,对于大型XML文档来说,可能会占用过多的内存,因此不适合对大型XML文档进行解析。
2. SAX解析器SAX(Simple API for XML)解析器是一种基于事件驱动的解析器,它逐行解析XML文档,只在遇到标签开始、标签结束和文本内容时触发相应的事件,从而大大减小了内存开销。
SAX解析器适合用于对大型XML文档进行顺序读取和简单处理。
3. StAX解析器StAX(Streaming API for XML)解析器是一种基于迭代器的解析器,它允许开发者以类似流的方式读写XML文档,同时也支持部分随机访问功能。
由于StAX解析器结合了DOM和SAX解析器的优点,因此在某些场景下可以取得很好的效果。
三、Java中使用XML解析器的常见场景和技巧1. 选择合适的解析器在实际开发中,选择合适的解析器非常重要。
如果需要对XML文档进行较为复杂的处理,并且内存资源充足,那么可以选择DOM解析器;如果需要对大型XML文档进行顺序读取和简单处理,那么可以选择SAX解析器;如果需要兼顾随机访问和内存占用的平衡,那么可以选择StAX解析器。
org.w3c.dom(javadom)解析XML文档

org.w3c.dom(javadom)解析XML⽂档位于org.w3c.dom操作XML会⽐较简单,就是将XML看做是⼀颗树,DOM就是对这颗树的⼀个数据结构的描述,但对⼤型XML⽂件效果可能会不理想⾸先来了解点Java DOM 的 API:1.解析器⼯⼚类:DocumentBuilderFactory创建的⽅法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();2.解析器:DocumentBuilder创建⽅法:通过解析器⼯⼚类来获得 DocumentBuilder db = dbf.newDocumentBuilder();3.⽂档树模型Document创建⽅法:a.通过xml⽂档 Document doc = db.parse("bean.xml"); b.将需要解析的xml⽂档转化为输⼊流 InputStream is = new FileInputStream("bean.xml");Document doc = db.parse(is);Document对象代表了⼀个XML⽂档的模型树,所有的其他Node都以⼀定的顺序包含在Document对象之内,排列成⼀个树状结构,以后对XML⽂档的所有操作都与解析器⽆关,直接在这个Document对象上进⾏操作即可;包含的⽅法:4.节点列表类NodeListNodeList代表了⼀个包含⼀个或者多个Node的列表,根据操作可以将其简化的看做为数组5.节点类NodeNode对象是DOM中最基本的对象,代表了⽂档树中的抽象节点。
但在实际使⽤中很少会直接使⽤Node对象,⽽是使⽤Node对象的⼦对象Element,Attr,Text等6.元素类Element是Node类最主要的⼦对象,在元素中可以包含属性,因⽽Element中有存取其属性的⽅法7.属性类Attr代表某个元素的属性,虽然Attr继承⾃Node接⼝,但因为Attr是包含在Element中的,但并不能将其看做是Element的⼦对象,因为Attr并不是DOM树的⼀部分基本的知识就到此结束,更加具体的⼤家可以参阅JDK API⽂档实战:1.使⽤DOM来遍历XML⽂档中的全部内容并且插⼊元素:school.xml⽂档:<?xml version = "1.0" encoding = "utf-8"?><School><Student><Name>沈浪</Name><Num>1006010022</Num><Classes>信管2</Classes><Address>浙江杭州3</Address><Tel>123456</Tel></Student><Student><Name>沈1</Name><Num>1006010033</Num><Classes>信管1</Classes><Address>浙江杭州4</Address><Tel>234567</Tel></Student><Student><Name>沈2</Name><Num>1006010044</Num><Classes>⽣⼯2</Classes><Address>浙江杭州1</Address><Tel>345678</Tel></Student><Student><Name>沈3</Name><Num>1006010055</Num><Classes>电⼦2</Classes><Address>浙江杭州2</Address><Tel>456789</Tel></Student></School>DomDemo.java1 package xidian.sl.dom;2import java.io.FileOutputStream;34import javax.xml.parsers.DocumentBuilder;5import javax.xml.parsers.DocumentBuilderFactory;67import org.apache.crimson.tree.XmlDocument;8import org.w3c.dom.Document;9import org.w3c.dom.Element;10import org.w3c.dom.NodeList;111213public class DomDemo {14/**15 * 遍历xml⽂档16 * */17public static void queryXml(){18try{19//得到DOM解析器的⼯⼚实例20 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();21//从DOM⼯⼚中获得DOM解析器22 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();23//把要解析的xml⽂档读⼊DOM解析器24 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");25 System.out.println("处理该⽂档的DomImplementation对象 = "+ doc.getImplementation());26//得到⽂档名称为Student的元素的节点列表27 NodeList nList = doc.getElementsByTagName("Student");28//遍历该集合,显⽰结合中的元素及其⼦元素的名字29for(int i = 0; i< nList.getLength() ; i ++){30 Element node = (Element)nList.item(i);31 System.out.println("Name: "+ node.getElementsByTagName("Name").item(0).getFirstChild().getNodeValue());32 System.out.println("Num: "+ node.getElementsByTagName("Num").item(0).getFirstChild().getNodeValue());33 System.out.println("Classes: "+ node.getElementsByTagName("Classes").item(0).getFirstChild().getNodeValue());34 System.out.println("Address: "+ node.getElementsByTagName("Address").item(0).getFirstChild().getNodeValue());35 System.out.println("Tel: "+ node.getElementsByTagName("Tel").item(0).getFirstChild().getNodeValue());36 }3738 }catch (Exception e) {39// TODO: handle exception40 e.printStackTrace();41 }42 }43/**44 * 向已存在的xml⽂件中插⼊元素45 * */46public static void insertXml(){47 Element school = null;48 Element student = null;49 Element name = null;50 Element num = null;51 Element classes = null;52 Element address = null;53 Element tel = null;54try{55//得到DOM解析器的⼯⼚实例56 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();57//从DOM⼯⼚中获得DOM解析器58 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();59//把要解析的xml⽂档读⼊DOM解析器60 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");61//得到⽂档名称为Student的元素的节点列表62 NodeList nList = doc.getElementsByTagName("School");63 school = (Element)nList.item(0);64//创建名称为Student的元素65 student = doc.createElement("Student");66//设置元素Student的属性值为23167 student.setAttribute("examId", "23");68//创建名称为Name的元素69 name = doc.createElement("Name");70//创建名称为⾹⾹的⽂本节点并作为⼦节点添加到name元素中71 name.appendChild(doc.createTextNode("⾹⾹"));72//将name⼦元素添加到student中73 student.appendChild(name);74/**75 * 下⾯的元素依次加⼊即可76 * */77 num = doc.createElement("Num");78 num.appendChild(doc.createTextNode("1006010066"));79 student.appendChild(num);8081 classes = doc.createElement("Classes");82 classes.appendChild(doc.createTextNode("眼视光5"));83 student.appendChild(classes);8485 address = doc.createElement("Address");86 address.appendChild(doc.createTextNode("浙江温州"));87 student.appendChild(address);8889 tel = doc.createElement("Tel");90 tel.appendChild(doc.createTextNode("123890"));91 student.appendChild(tel);9293//将student作为⼦元素添加到树的根节点school94 school.appendChild(student);95//将内存中的⽂档通过⽂件流⽣成insertSchool.xml,XmlDocument位于crison.jar下96 ((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/insertSchool.xml"));97 System.out.println("成功");98 }catch (Exception e) {99// TODO: handle exception100 e.printStackTrace();101 }102 }103public static void main(String[] args){104//读取105 DomDemo.queryXml();106//插⼊107 DomDemo.insertXml();108 }109 }110运⾏后结果:然后到⽬录下查看⽣成的xml⽂件:打开查看内容:上⾯添加元素后输出的⽂件与之前的⽂件不是同⼀个⽂件,如果需要输出到原⽂件中,那么只要将路径改为原⽂间路径即可:src/xidian/sl/dom/school.xml2.创建XML过程与插⼊过程相似,就是Document需要创建package xidian.sl.dom;import java.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.apache.crimson.tree.XmlDocument;import org.w3c.dom.Document;import org.w3c.dom.Element;public class CreateNewDom {/*** 创建xml⽂档* */public static void createDom(){Document doc;Element school,student;Element name = null;Element num = null;Element classes = null;Element address = null;Element tel = null;try{//得到DOM解析器的⼯⼚实例DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();//从DOM⼯⼚中获得DOM解析器DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();//创建⽂档树模型对象doc = dbBuilder.newDocument();if(doc != null){//创建school元素school = doc.createElement("School");//创建student元素student = doc.createElement("Student");//设置元素Student的属性值为231student.setAttribute("examId", "23");//创建名称为Name的元素name = doc.createElement("Name");//创建名称为⾹⾹的⽂本节点并作为⼦节点添加到name元素中name.appendChild(doc.createTextNode("⾹⾹"));//将name⼦元素添加到student中student.appendChild(name);/*** 下⾯的元素依次加⼊即可* */num = doc.createElement("Num");num.appendChild(doc.createTextNode("1006010066"));student.appendChild(num);classes = doc.createElement("Classes");classes.appendChild(doc.createTextNode("眼视光5"));student.appendChild(classes);address = doc.createElement("Address");address.appendChild(doc.createTextNode("浙江温州"));student.appendChild(address);tel = doc.createElement("Tel");tel.appendChild(doc.createTextNode("123890"));student.appendChild(tel);//将student作为⼦元素添加到树的根节点schoolschool.appendChild(student);//添加到⽂档树中doc.appendChild(school);//将内存中的⽂档通过⽂件流⽣成insertSchool.xml,XmlDocument位于crison.jar下((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/createSchool.xml")); System.out.println("创建成功");}}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public static void main(String[] args) {CreateNewDom.createDom();}}运⾏结果:DOM的操作应该还是⾮常简单明了的,掌握了没哦。
java dom解析

java dom解析DOM解析器是一种用于解析XML文档的Java库。
它允许开发人员以结构化的方式访问和操作XML文件的数据。
DOM解析器将整个XML文档加载到内存中,并将其表示为一个树形结构,其中每个节点都对应着XML文档中的一个元素、属性或文本。
通过 DOM 解析器,我们可以轻松地遍历整个XML文档,提取所需的数据或修改文档的内容。
使用DOM解析器解析XML文档的基本步骤如下:1. 导入所需的Java类库:要使用DOM解析器,我们需要导入javax.xml.parsers包的相应类。
2. 创建一个XML解析器的工厂对象:通过调用javax.xml.parsers包中的DocumentBuilderFactory类的静态方法newInstance(),我们可以获取XML解析器的工厂对象。
3. 创建一个XML解析器对象:使用XML解析器的工厂对象的newDocumentBuilder()方法,我们可以创建一个XML解析器对象。
4. 解析XML文档:通过调用XML解析器对象的parse()方法,我们可以将XML文档加载到内存中并解析它。
解析结果将以一个Document对象的形式返回。
5. 获取节点信息:我们可以使用Document对象提供的方法来访问XML文档中的各个节点。
例如,可以使用getElementsByTagName()方法获取指定标签名的节点列表,使用getAttribute()方法获取节点的属性值,使用getTextContent()方法获取节点的文本内容等等。
6. 进行数据处理:一旦获取了所需的节点信息,我们可以根据具体需求对数据进行处理。
例如,可以将节点的属性值转换为Java对象,将节点的数据存储到数据库中,或者将节点的文本内容展示在用户界面上等等。
7. 释放资源:在处理完XML文档后,记得要释放DOM解析器的资源,可以调用Document对象的normalize()方法进行清理工作。
domparser解析html例子

在学习DOMParser解析HTML的例子之前,让我们先了解一下DOMParser的定义和作用。
DOMParser是一种在JavaScript中使用的解析器,用于将字符串解析为DOM文档。
它可以将一个字符串表示的XML或HTML源代码解析成一个DOM Document对象。
通过DOMParser,我们可以方便地访问和操作解析后的DOM文档,实现对HTML或XML内容的动态修改和操作。
现在,让我们以一个简单的例子来说明DOMParser的使用和具体效果。
假设我们有一个包含HTML源代码的字符串,如下所示:```html<html><body><h1>DOMParser Example</h1><p>This is a simple example of using DOMParser to parse HTML.</p></body></html>```现在,我们需要使用DOMParser来解析上述的HTML字符串,并获取其中的标题和段落内容。
我们可以使用以下JavaScript代码来实现:```javascriptconst htmlString = `<html><body><h1>DOMParser Example</h1><p>This is a simple example of using DOMParser to parse HTML.</p></body></html>`;const parser = new DOMParser();const doc = parser.parseFromString(htmlString, 'text/html');const title = doc.querySelector('h1').textContent;const paragraph = doc.querySelector('p').textContent;console.log('Title:', title);console.log('Paragraph:', paragraph);```上述代码首先定义了一个包含HTML源代码的字符串htmlString,然后利用DOMParser的parseFromString方法将其解析为一个DOM Document对象doc。
dom parse语句

dom parse语句摘要:1.DOM 解析简介2.DOM 解析方法3.DOM 解析实例正文:1.DOM 解析简介DOM(Document Object Model,文档对象模型)是W3C 组织推荐的一种表示HTML 文档的编程接口。
通过DOM,我们可以使用编程语言来操作和修改HTML 文档结构。
DOM 解析则是将HTML 字符串解析成DOM 树,以便我们可以对其进行操作。
2.DOM 解析方法在JavaScript 中,DOM 解析可以通过以下两种方法实现:(1)使用DOMParser 对象DOMParser 是JavaScript 内置的DOM 解析器,可以通过以下方式创建:```javascriptconst parser = new DOMParser();```然后,我们可以使用`parseFromString()`方法将HTML 字符串解析为DOM 树:```javascriptconst htmlString = "<html><body><p>Hello,world!</p></body></html>";const doc = parser.parseFromString(htmlString, "text/html");```(2)使用`createElement()`和`appendChild()`方法我们可以使用`createElement()`方法创建一个新的DOM 元素,然后使用`appendChild()`方法将其添加到另一个DOM 元素的子节点列表中。
通过递归地添加子节点,我们可以将HTML 字符串解析为DOM 树。
```javascriptfunction parseHTML(htmlString) {const doc = document.createElement("div");doc.appendChild(parseHTMLNode(htmlString, doc));return doc;}function parseHTMLNode(htmlString, parentNode) {const tempDiv = document.createElement("div");tempDiv.innerHTML = htmlString;const childNodes = tempDiv.childNodes;for (let i = 0; i < childNodes.length; i++) {const childNode = childNodes[i];if (childNode.nodeType === 3) { // 文本节点const textNode =document.createTextNode(childNode.nodeValue);parentNode.appendChild(textNode);} else if (childNode.nodeType === 1) { // 元素节点const element =document.createElement(childNode.tagName);element.appendChild(parseHTMLNode(childNode.innerHTML, element));parentNode.appendChild(element);}}}const htmlString = "<html><body><p>Hello,world!</p></body></html>";const doc = parseHTML(htmlString);```3.DOM 解析实例我们可以使用上述方法来解析HTML 字符串,并操作解析后的DOM 树。
xml文件解析方法

xml文件解析方法XML文件解析方法引言:XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和灵活性,被广泛应用于数据交换和配置文件等领域。
在处理XML文件时,解析是必不可少的环节。
本文将介绍几种常用的XML文件解析方法,包括DOM、SAX和StAX。
一、DOM解析方法DOM(文档对象模型)是一种将整个XML文件以树形结构加载到内存中的解析方法。
DOM解析器将XML文件解析为一个树状结构,通过遍历节点来获取和操作XML文件中的数据。
DOM解析方法的优点是易于理解和使用,可以随机访问XML文件中的任意节点,但缺点是占用内存较大,不适用于大型XML文件的解析。
1. 创建DOM解析器对象:使用标准的Java API,可以通过DocumentBuilderFactory类来创建DOM解析器对象。
2. 加载XML文件:通过DOM解析器对象的parse()方法加载XML文件,将其转化为一个树形结构。
3. 遍历节点:使用DOM解析器对象提供的方法,如getElementsByTagName()、getChildNodes()等,可以遍历XML文件中的各个节点,获取节点的名称、属性和文本内容等信息。
4. 获取节点数据:通过节点对象提供的方法,如getNodeName()、getTextContent()等,可以获取节点的名称和文本内容。
二、SAX解析方法SAX(简单API for XML)是一种基于事件驱动的XML解析方法。
在SAX解析过程中,解析器顺序读取XML文件,当遇到节点开始、节点结束或节点文本等事件时,会触发相应的回调方法。
相比于DOM 解析方法,SAX解析方法具有内存占用小、解析速度快的优点,但缺点是无法随机访问XML文件中的节点。
1. 创建SAX解析器对象:使用标准的Java API,可以通过SAXParserFactory类来创建SAX解析器对象。
2. 实现事件处理器:自定义一个事件处理器,实现SAX解析器提供的DefaultHandler类,并重写相应的回调方法,如startElement()、endElement()和characters()等。
如何使用DOM解析XML文件

如何使用DOM解析XML文件DOM(Document Object Model)是一种用于解析和处理XML文件的常用技术。
DOM API允许开发者以树形的数据结构方式访问和操作XML文件的内容。
1.导入DOMAPI:首先,你需要在你的代码中导入DOMAPI相关的类和方法。
在大多数编程语言中,都有现成的DOM库可供使用。
3. 加载XML文件:将要解析的XML文件加载到解析器中,可以使用解析器的`load(`或`parse(`方法,这个方法会将XML文件读取到内存中。
4. 创建一个DOM树:通过调用解析器的`getDocument(`或`parse(`方法,可以获取解析器对XML文件进行解析后的DOM树对象。
5. 获取根节点:通过DOM树对象的`getDocumentElement(`方法,可以获取XML文件的根节点。
6. 遍历子节点:通过DOM树对象的`getChildNodes(`方法,可以获取根节点的所有子节点。
然后,你可以使用循环遍历这些子节点,获取它们的内容和属性,并进一步操作。
7. 获取节点内容:通过DOM树节点对象的`getNodeValue(`方法,可以获取节点的文本内容。
如果节点有子节点,可以使用`getChildNodes(`方法获取它们的内容。
8. 获取节点属性:通过DOM树节点对象的`getAttribute(`方法,可以获取节点的属性值。
你需要在括号中指定要获取的属性名称。
9. 修改节点内容:通过DOM树节点对象的`setNodeValue(`方法,可以修改节点的文本内容。
10. 修改节点属性:通过DOM树节点对象的`setAttribute(`方法,可以修改节点的属性值。
你需要在括号中指定要修改的属性名称和新值。
11. 创建新节点:通过DOM树节点对象的`createElement(`方法,可以创建一个新节点对象。
你需要在括号中指定节点名称。
12. 添加节点:通过DOM树节点对象的`appendChild(`方法,可以将新节点添加为现有节点的子节点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建一个Element节点,节点名称由name参数指定
创建一个Attr节点,属性名称由name参数指定,然 后利用setAttributeNode方法设置为某个节点的属性 创建一个CDATASection节点 创建一个具有指定内容的文本节点
Document document= builder.parse(new File("01.xml"));
builder对象除了调用public Document parse(File file)方法解析 文件外,还可以调用其它两个方法:
public Document parse(InputStream in) public Document parse(String uri)
返回
8.2 节点的类型
Document节点
Element节点
DocumentType节点
Element节点
Text节点
CDATASection节点
8.2.1 Node接口 8.2.2 NodeList接口
8.2.3 NamedNodeMap接口
返回
Node接口 (1)
DOM规范中很多接口都是从Node接口继承而来,在DOM规范中把XML 文件的每一个标记、属性、注释、文本内容等都看作节点。一个Node对象代 表了一个类型的节点。DOM规范中,不同类型的节点采用不同的整数加以区 分。为了保证日后能够容易地对节点类型进行扩充,W3C保留了1~200之间的 整数,作为不同节点类型的定义。具体对应关系见下表:
方法 getNodeName() getNodeValue() setNodeValue(String arg) getNodeType() getChildNodes() getFirstChild() getLastChild() getPreviousSibling() getNextSibling() getparentNode() getAttributes() appendChild(Node arg) hasChildNodes() insertBefore(Node arg1,Node arg2) removeChild(Node arg) replaceChild(Node arg1,Node arg2) getNamespaceURI() has Attributes() getTextContent() isSameNode(Node arg) isEqualNode(Node arg) 功能描述 获取当前节点的名称 获取当前节点的值 设置当前节点的值 获取当前节点的类型 获取当前节点的所有子节点,返回NodeList对象 获取当前节点的第一个子节点 获取当前节点的最后一个子节点 获取当前节点的前一个兄弟节点 获取当前节点的后一个兄弟节点 获取当前节点的父节点 获得当前节点的所有属性,返回NamedNodeMap对象 在当前节点的所有子节点之后添加新节点arg 判断当前节点是否有子节点 把节点arg2插入到当前节点的子节点arg1之前 从当前节点的子节点中删除arg节点 用arg2节点替换当前节点的子节点arg1 获得Namespace的URI 判断当前节点是否具有属性 获取当前节点的文本内容 判断当前节点与arg是否是同一个节点 判断当前节点与arg是否相等
8.1.1 DOM标准
8.1.2 认识DOM解析器
返回
DOM标准
DOM是Document Object Model文档对象模型的缩写,是W3C制定的 一套规范。依据DOM规范(/DOM/),DOM是一种与 浏览器、平台、语言无关的接口。各种语言可以按照DOM规范去实现这 些接口,给出解析文件的解析器。DOM规范中所指的文件相当广泛,其 中包括XML文件以及HTML文件。DOM有3个版本:
实体节点(Entity) 处理指令节点(ProcessingInstruction) Comment节点 Document节点 文档类型节点(DocumentType) 文档片段节点(DocumentFragment) Notation节点
5
6 7 8 9 10 11 12
ENTITY_REFERENCE_NODE
第8章 DOM解析器
8.1 DOM解析器 8.2 节点的类型 8.3 Document节点 8.4 Element节点 8.5 Text节点 8.6 CDATASection节点
第8章 DOM解析器
8.7 Attr节点 8.8 DocumentType节点 8.9 处理空白 8.10 验证规范性和有效性 8.11 使用DOM生成XML文件 8.12 XML与JSP的结合
8.1 DOM解析器
基于DOM的解析器称为DOM解析器。DOM解析器解析 XML文件的最大特点是把整个XML文件全部加载到内存中, 在内存中形成一个与XML文件结构相对应的节点树。然后 依据节点的子孙关系来遍历数据。通过DOM解析器处理 XML文件效率高,但是,十分消耗系统的资源,比较适合 复杂但相对较小的文件。
方法 getDocumentElement() getDoctype() getElementByTagName(String name) getElementByTagNameNS(String namespaceURI, String localname)
功能描述
返回当前节点的Element节点 返回当前节点的DocumentType子节点 返回一个NodeList对象,该对象由参数name指定的 节点的Element类型子孙节点组成。 返回一个NodeList对象,该对象由参数localname指 定的节点的Element类型子孙节点组成,localname的 名称空间由参数namespaceURI指定
ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE
Node接口 (2)
Node接口定义了所有类型的节点都具有的属性和方法。 见下表:
Level:包括对XML1.0和HTML的支持,每个HTML元素被表示为一个接口。 它包括用于添加、编辑、移动和读取节点中包含的信息的方法等。 Level2:包括了更广泛的W3C推荐技术,比如层叠样式表(CSS)和 名称空间(XMLNamespaces),允许开发人员检测和使用可能适 用于某个节点的名称空间信息。Level2还支持W3C所谓的“事件”, 比如一个文件能对诸如鼠标移动之类的“事件”做出反应。 Level3:包括对创建Document对象(以前的版本将这个任务留给实现,使得 创建通用应用程序很困难)的更好支持、增强的名称空间支持,以 及用来处理文档加载和保存、验证以及XPath的新模块;XPath是在 XSL转换(XSL Transformation)以及其他XML技术中用 来选择节点的手段。 返回
8.3 Document节点(2)
Document节点常用的方法续表
方法 getElementById(String id) getXmlEncoding() getInputEncoding() getXmlStandalone() getXmlVersion() setDocumentURI(String documentURI) setXmlVersion(String mxlVersion) createElement(String name) 功能描述 方法,返回一个NodeList对象,该对象由给定ID的 节点的Element类型子孙节点组成 返回XML文件使用的编码 返回输入编码 返回XML文件声明中的standalone属性的值 返回XML文件声明中的version属性值 设置DocumenURI 设置XML的版本
DocumentBuilder builder = factory.newDocumentBuilder();
认识DOM解析器(3)
当获得一个builder对象(DOM解析器)之后,就可以调用该对象 的public Document parse(File file)方法来解析文件。解析的内容以对象的 形式返回,该对象是实现了Document接口的一个实例,称为Document 对nt节点代表了整个XML文件,XML文件的所有内容都被封 装在一个Document节点内。Document对象提供了对文档中数据进行访 问的入口,应用程序可以从该节点的子孙节点中获得整个XML文件的 数据。
Document类型节点的两个子节点类型是DocumentType类型和 Element类型。 Document节点常用的方法见下表:
节点类型 标记节点(Element) 属性节点(Attr) 文本节点(Text) CDATA节点(CDATASection) 对应的整数 1 2 3 4 表示常量 ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE
实体引用节点(EntityReference)
认识DOM解析器(2)
(1)建立一个解析器工厂,利用这个工厂来获得一个具体的解析器 对象:
DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
使用DocumentBuilderFacotry的目的是为了创建与具体解析器无关 的程序,当DocumentBuilderFactory类的静态方法newInstance()被调用 时,它根据一个系统变量来决定具体使用哪一个解析器。 (2)factory对象调用它的静态方法newDocumentBuilder()获得一个 DocumentBuilder对象,这个对象就是DOM解析器。
返回
NodeList接口
NodeList接口提供了对节点集合的抽象定义,用于表示有顺序关系 的一组节点。NodeList中的每一个节点都可以通过索引来访问,索引值 0表示第一个节点。NodeList接口有两个常用的方法,见下表: