使用DOM解析XML文档

合集下载

java_Dom4j解析XML详解

java_Dom4j解析XML详解

学习:Dom4j1、DOM4J简介DOM4J是 出品的一个开源XML 解析包。

DOM4J应用于Java 平台,采用了Java 集合框架并完全支持DOM,SAX 和JAXP。

DOM4J 使用起来非常简单。

只要你了解基本的XML-DOM 模型,就能使用。

Dom:把整个文档作为一个对象。

DOM4J 最大的特色是使用大量的接口。

它的主要接口都在org.dom4j里面定义:接口之间的继承关系如下:interface ng.Cloneableinterface org.dom4j.Nodeinterface org.dom4j.Attributeinterface org.dom4j.Branchinterface org.dom4j.Documentinterface org.dom4j.Elementinterface org.dom4j.CharacterDatainterface org.dom4j.CDATAinterface mentinterface org.dom4j.Textinterface org.dom4j.DocumentTypeinterface org.dom4j.Entityinterface org.dom4j.ProcessingInstruction2、XML文档操作12.1、读取XML文档:读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。

因为利用了相同的接口,它们的调用方式是一样的。

public static Docum ent load(String filenam e) {Document docum ent =null;try {SAXReader saxReader = new SAXReader();docum ent =saxReader.read(new File(filename)); //读取XML文件,获得docum ent 对象} catch (Exception ex) {ex.printStackTrace();}return docum ent;}或public static Docum ent load(URL url) {Document docum ent =null;try {SAXReader saxReader = new SAXReader();docum ent =saxReader.read(url); //读取XML文件,获得docum ent对象} catch (Exception ex) {ex.printStackTrace();}return docum ent;}//读取指定的xml文件之后返回一个Document对象,这个对象代表了整个XML文档,用于各种Do m运算。

解析Xml文件的三种方式

解析Xml文件的三种方式

解析Xml⽂件的三种⽅式1、Sax解析(simple api for xml) 使⽤流式处理的⽅式,它并不记录所读内容的相关信息。

它是⼀种以事件为驱动的XML API,解析速度快,占⽤内存少。

使⽤回调函数来实现。

1class MyDefaultHander extends DefaultHandler{2private List<Student> list;3private Student student;45 @Override6public void startDocument() throws SAXException {7super.startDocument();8 list=new ArrayList<>();9 }1011 @Override12public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {13super.startElement(uri, localName, qName, attributes);14if(qName.equals("student")){15 student=new Student();1617 }18 preTag=qName;19 }2021 @Override22public void endElement(String uri, String localName, String qName) throws SAXException {23if(qName.equals("student")){24 list.add(student);25 }26 preTag=null;27 }2829 @Override30public void characters(char[] ch, int start, int length) throws SAXException {31if(preTag!=null){32if(preTag.equals("id")){33 student.setId(Integer.parseInt(new String(ch,start,length)));34 }else if(preTag.equals("name")){35 student.setName(new String(ch,start,length));36 }else if(preTag.equals("age")){37 student.setAge(Integer.parseInt(new String(ch,start,length)));38 }39 }40 }41public List<Student> getStudents(){42return list;43 }44 }45public List<Student> sax_parser(){46 List<Student> list=null;47try {48 SAXParser parser= SAXParserFactory.newInstance().newSAXParser();49 InputStream is= getAssets().open("student.xml");50 MyDefaultHander hander=new MyDefaultHander();51 parser.parse(is,hander);52 list= hander.getStudents();53 } catch (ParserConfigurationException e) {54 e.printStackTrace();55 } catch (SAXException e) {56 e.printStackTrace();57 } catch (IOException e) {58 e.printStackTrace();59 }60return list;61 }2、Dom解析 DOM(Document Object Model) 是⼀种⽤于XML⽂档的对象模型,可⽤于直接访问XML⽂档的各个部分。

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

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,适用于处理数据流,即随着数据的流动而依次处理数据。

第10章 使用DOM访问XML文档

第10章 使用DOM访问XML文档

根元素 (学生列表)
元素 (学生) 元素 (姓名) 元素 (性别) 元素 (学号)
元素 (学生) 元素 (姓名) 元素 (性别)
元素 (学号)
文本 (#text)
文本 (#text)
属性 (班级)
文本 (#text)
文本 (#text)
文本 (#text)
属性 (班级)
文本 (#text)
XML
KMR

validateOnParse:指示解析器是否应使用DTD或Schema验证文档。
XML
KMR
教程
DOM结构树
DOM一共有12种节点类型。
分析XML文档的DOM结构树: 例: ch7-1.xml
根节点 (#document) 处理指令 (xml) 属性 (version) 属性 (encoding) 注释 (#comment)
createNode(节点类型,节点名称, 名称空间URI) createProcessingInstruction(处理 指令目标,数据) createTextNode(文本内容) getElementsByTagName(元素名 称) load(文档路径) loadXML(XML字符串形式)
save(保存目标)
XML
KMR
教程
DOM(文档对象模型)
分析XML文档的DOM结构树: 例: ch7-1.xml <?xml version="1.0" encoding="GB2312"?> <!--下面是一个学生名单列表--> <学生列表> <学生> <学号>200120101</学号> <姓名 班级="01信管1">季慧奇</姓名> <性别>女</性别> </学生> <学生> <学号>200120102</学号> <姓名 班级="01信管1">凌怡</姓名> <性别>女</性别> </学生> </学生列表>

org.w3c.dom(javadom)解析XML文档

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解析

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()方法进行清理工作。

读写XML的四种方法

读写XML的四种方法

读写XML的四种方法XML(eXtensible Markup Language)是一种用于表示和传输数据的标记语言。

它具有良好的可读性和扩展性,被广泛应用于Web开发、数据交换和配置文件等领域。

在读写和处理XML数据时,有许多方法可供选择。

本文将介绍四种常见的读写XML的方法:DOM、SAX、JDOM、和XMLStreamReader/XMLStreamWriter。

1. DOM(Document Object Model):DOM是一种基于树形结构的解析器,它将整个XML文档加载到内存中,并将其表示为一个对象树。

在DOM中,每个XML元素都被表示为一个节点(Node),可以通过节点的属性和方法对其进行操作。

读取XML文档时,可以使用DOM解析器将其转换为一个DOM树,然后通过节点的方法访问和修改树结构。

写入XML文档时,可以通过创建和修改节点来构建DOM树,并使用DOM解析器将其保存为XML文档。

使用DOM读取XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。

- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。

- 使用DocumentBuilder对象解析XML文档,并返回一个Document对象。

- 通过Document对象的方法遍历和操作XML文档的节点。

使用DOM写入XML文档的基本步骤如下:- 创建一个DocumentBuilderFactory对象。

- 根据DocumentBuilderFactory对象创建一个DocumentBuilder对象。

- 使用DocumentBuilder对象创建一个Document对象。

- 通过Document对象的方法创建和添加元素节点、属性节点等。

- 使用TransformerFactory和Transformer对象将Document对象保存为XML文档。

DOM的优点是易于使用和理解,可以方便地遍历和修改XML文档。

xml文件解析方法

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()等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
parentNode childNodes firstChild lastChild nextSibling previousSibling 获取父节点 获取子节点集合 获取第一个子节点 获取最后一个子节点 获取同级别中后一个节点 获取同级别中前一个节点
节点之间的关系
功能
节点操作
访问节点
JavaScript实现DOM 访问节点 C#实现DOM访问节点
加载XML文档 加载 文档
loadXml()方法加载XML字符串
IE浏览器
Firefox浏览器
XmlDocument xmlDoc = new XmlDocument(); xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); C#语言加载XML字符串 parser=new DOMParser(); xmlDoc.LoadXml(text); xmlDoc.async="false"; xmlDoc=parser.parseFromString(text,"text/xml"); xmlDoc.loadXML(text);
DOM(文档对象模型)定义了访问XML 和 XHTML 等文档的标准 XML DOM 定义了所有 XML 元素的对象和属性,以及访问的方法(接口)
检查文档是否格式良好
XML文档
XML解析器
DOM树
应用程序
加载文档并创建节点树
通过标准接口访问文档
DOM简介 简介
DOM级别(规范)
DOM级别指W3C组织的DOM规范,W3C组织为DOM规范定义了3个级别
解析XML文档 第2章 使用 章 使用DOM解析 解析 文档
课程回顾
一个XML文档由元素、属性、实体、CDATA、PCDATA构成 DTD使用一系列合法的元素来定义文档的结构,使用的主要标记包括:
<!DOCTYPE>定义文档的类型 <!ELEMENT>定义文档元素 <!ATTRIBUTE>定义文档的属性 <!ENTITY>定义实体
2.2 加载XML文档 加载 文档
使用load()方法加载XML文档
兼容IE和Firefox浏览器 C#语言在服务器端加载XML文档 Firefox、Mozilla、 IE浏览器
Opera等浏览器
try{ xmlDoc=new xmlDoc = new XmlDocument(); XmlDocumentActiveXObject("Microsoft.XMLDOM"); xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); }xmlDoc=document.implementation.createDocument("","",null); xmlDoc.Load("books.xml"); catch(e){ xmlDoc.async="false"; xmlDoc.async="false"; try{ xmlDoc=document.implementation.createDocument("","",null); xmlDoc.load("books.xml"); } xmlDoc.load("books.xml"); catch(e) {alert(e.message)} } try{ xmlDoc.async=false; xmlDoc.load("books.xml"); }
节点和节点树
节点之间的关系描述如下:
在节点树中,顶端的节点成为根节点 根节点之外的每个节点都有一个父节点 节点可以有任何数量的子节点 叶节点是没有子节点的节点 同级节点是拥有相同父节点的节点
使用DOM可以在不了解节点树的确切结构以及其中包含的数据类型的情 况下,对其进行遍历
小结1 小结
XML DOM是什么? 节点树的节点之间有哪几种关系?alue属性来修改文本节点和属性节点的, 或者通过setAttribute()方法修改属性的值
与DTD相比, XML Schema具有以下优点:
支持更丰富的数据类型 可针对未来的需求进行扩展 比DTD更完善,功能更强大 基于 XML 编写,比DTD语法更简单 支持命名空间
所有XML Schema的根元素都是<schema>,外部schema以.xsd文件为后 缀名 XML Schema使用<simpleType>定义简单类型 XML Schema使用<complexType>定义复杂类型
setAttributeNode(att_node) 创建一个注释节点
var node=xmlDoc.getElementsByTagName("book")[0]; insertBefore(newNode,refNode) 在指定的子节点之前插入节点
insertAfter(newNode,refNode) node.appendChild(ele); insertData(offset,string) 在指定的子节点之后插入节点 将元素ele添加到 将数据插入已有的文本节点中 node的子元素末尾
createComment(data)
XmlAttribute att = xmlDoc.CreateAttribute("pubdate"); 将属性节点添加到一个元素节点中 "2008att.Value==xmlDoc.createAttribute("pubdate"); "2008-1-9"; var att setAttribute(name,value) 为一个元素创建一个新的属性节点 ele.SetAttributeNode(att); createTextNode(data)"2008-1-9"; 创建一个文本节点 att.nodeValue = "2008将属性节点添加 XmlNode node = xmlDoc.GetElementsByTagName("book")[0]; createCDATAsection(data) 创建 CDATA节点 到元素节点中 ele.setAttributeNode(att); node.AppendChild(ele);
2. DOM编程接口 编程接口
2.1 XML DOM 对象
XML DOM对象中封装了常用的操作XML文档的属性和方法
XML DOM Attr 对象:表示 Element 对象的属性 XML DOM CDATASection 对象:表示文档中的 CDATA 段 XML DOM Comment 对象:表示文档中注释节点的内容 XML DOM Document 对象:表示整个 XML 文档 XML DOM DOMParser 对象:该对象通过解析XML 标记来创建一个文档 XML DOM Element 对象:表示 XML 文档中的元素 XML DOM NamedNodeMap 对象:表示一个无序的节点列表 XML DOM Node 对象:表示文档树中的一个节点 XML DOM NodeList 对象:表示一个有序的节点列表 XML DOM Text 对象:表示元素或属性的文本内容 XML DOM XMLHttpRequest 对象
本章内容
文档对象模型 节点和节点树 使用DOM加载XML文档 使用DOM访问、创建和修改节点
本章目标
理解文档对象模型 理解节点和节点树 能够使用JavaScript语言和C#语言解析XML文档
加载文档 添加节点 删除节点 修改节点 替换节点 复制节点
1. DOM及其模型 及其模型
1.1 DOM简介
DOM 级别 1
DOM 级别 2
DOM 级别 3
1.2 节点和节点树
依据DOM的规定,XML文档中每个单元都是节点
整个文档是一个文档节点 每个 XML 标签是一个元素节点 包含在 XML 元素中的文本是文本节点 每一个 XML 属性是一个属性节点 注释属于注释节点
XML DOM将 XML 文档视为一种树结构
XmlNodeList nlist = xmlDoc.GetElementsByTagName("book")[0].ChildNodes; 遍历第一个book元素 XmlNode node = xmlDoc.GetElementsByTagName("book")[0].FirstChild; var nlist=xmlDoc.getElementsByTagName("book")[0].childNodes; 的所有子节点 //C#使用Count属性获取集合元素个数 var node=xmlDoc.getElementsByTagName("book")[0].firstChild; for nlist.Count; for (int i i=0;i<nlist.length;i++){ (var = 0; i < nlist.Count i++) { if (node.nodeType==1){ //XmlNodeType是C#枚举 ifdocument.write(node.nodeName); (node.NodeType == XmlNodeType.Element XmlNodeType.Element) 输出每个属性节点的值 } { Console.WriteLine( ); var att=node.attributes; } for(var j=0;j<att.length;j++){ var att = node.Attributes; document.writeln("<br/>元素"+node.nodeName+"有属性 for (int j = 0; j < att.Count; j++) "+att[i].nodeName+"="+att[i].nodeValue); { } Console.WriteLine("元素" + + "有属性" + att[i].Name + "=" + att[i].Value att[i].Value); 将当前节点的同级下个节 document.write("<br/>"); } 点作为操作节点 node=node.nextSibling; Console.WriteLine(); } node = node.NextSibling; }
相关文档
最新文档