《文档对象类型(DOM)课件》由会员分享,可在线阅读,更多相关《文档对象类型(DOM)课件(52页珍藏版)》请在金锄头文库上搜索。
1、XML技术应用,刘建芳 E-mail:vivian_,第四章,文档对象类型(DOM),本章导读,DOM基础知识 用XML文档对象模型编程 显示XML数据 综合案例,4.1 DOM的基础知识,4.1.1 DOM的概念和组成 DOM全称Document Object Model,是一个文件对象所组成的模型 DOM由三部分组成,包括:核心(core)、HTML和XML XML DOM包含四个主要对象: XML DOM Document XML DOM Node XML DOM NodeList XML DOM NamedNodeMap,4.1.2 DOM 结构模型,DOM对象映射了XML文档的树型结
2、构 一个XML分析器,在对XML文档进行分析之后,不管这个文档简单或复杂,其中的信息都会被转化成一棵对象节点树。,Books.xml对应的树结构,4.1.3 DOM的工作方式,首先将XML文档一次性的装入内存; 然后对文档进行解析,根据文档中定义的元素、属性、注释、处理指令等不同的内容进行分解,以“节点树”的形式在内存中创建XML文件的表示,也就是一个文档对象模型,4.1.3 DOM的工作方式,XML 文档组成和DOM 结点类型、结点名称、结点值的对应关系,4.1.3 DOM的工作方式,DOM 结点的共有属性,4.2 用XML文档对象模型编程,4.2.1 文档类,XmlAttribute Xm
3、lCDataSection XmlComment XmlDeclaration XmlEntity,XmlEntityReference XmlProcessingInstruction XmlText XmlWhiteSpace,4.2.2 集合类,XmlNodeList 用于迭代一组相关的结点,通过索引值以有序的方式进行遍历 XmlNamedNodeMap 名/值对的集合,一般用于访问XML属性,4.2.3 XmlDocument类,XmlDocument 成员 使用XmlDocument类 创建文档 载入XML文档 使用XmlDocument类解析XML文档 寻找结点 通过程序创建XML
4、文档,创建XML DOM文档,JScript var doc = new ActiveXObject(Microsoft.XMLDOM) VB Dim doc Set doc = CreateObject(Microsoft.XMLDOM) C# XmlDocument doc = new XmlDocument();,载入XML文档,JavaScript, VB, doc.async=false doc.loadXML(“books.xml”) doc.loadXML(book) C# doc.async=false; doc.loadXML(“books.xml”); doc.loadXM
5、L(book);,注意:通过loadXml()方法载入XML的时候,此方法既不支持验证也不会保留空白,任何上下文特定的信息如DTD、实体、命名空间都必须嵌入字符串中,使用XmlDocument类解析XML文档,寻找结点,通过DOM的ChildNodes、FirstChild、LastChild、NextSibling、PreviousSibling、ParentNode和OwnerDocument属性,可以浏览整个文档的层次结构 通过GetElementByTagName()、GetElementById()、SelectNodes()和SelectSingleNode()寻找特定结点,通过程
6、序创建XML文档,创建和添加结点 添加属性 保留修改 修改结点数据 删除节点 处理由XmlDocument引发的事件,通过程序创建XML文档(续),自由创建XML文档的基本步骤: 创建任意所需的结点 连接结点来创建树 将树添加至内存中的XML文档 按需保存文档,创建和添加结点,使用XmlDocument类的工厂方法来创建新的结点,然后将其添加至文档中。 CreateAttribute() CreateCDataSection() CreateComment() CreateDocumentFragment() CreateElement() CreateEntityReference() Cr
7、eateProcessingInstruction() CreateTextNode(),创建和添加结点(续),XmlDocument doc=new XmlDocument(); XmlNode declarationNode=doc.CreateXmlDeclaration(“1.0”,”,”); doc.AppendChild(declarationNode); XmlNode comment=doc.CreateComment(“This file represents a fragment of a book store inventory database”); doc.Appen
8、dChild(comment);,添加属性,XmlAttribute genreAttribute=doc.CreateAttribute(“genre”); genreAttribute.Value=txtGenre.Text; bookNode.Attributes.Append(genreAttribute);,保留修改,最后一步在存储介质上保留所有的修改,即保存文档 Save() Save(Stream) Save(string) Save(TextWriter) Save(XmlWriter),code,修改结点数据,PriceNode.FirstChild.Value=“10.99
9、”,删除节点,XmlDocument doc=new XmlDocument(); doc.LoadXml(“”+”the autobilgraphy of Benjamin Framklin”+”); XmlNode root=doc.DocumentElement; root.RemoveChild(root.FirstChild);,习题:,编程创建如下XML文档,习题:,编程改写XML文档如下:,实例:动态增加新图书,书店管理系统的书籍资料保存在XML文档中,需要动态地增加新的书籍资料。要求编写一个应用程序,可以对书籍XML文档增加新的书籍内容。, xmlBook 20 100 xml
10、 sqlServerBook 55 100 sqlServer VBBook 43 100 VB.NET ,分析:,明确加载XML文档的机制 确定需要新增的结点 明确新增结点元素的机制 创建新结点元素 组合结点元素 编写代码 测试,DOM解析XML文档的优缺点:,优点 对文档采用平行方式(以一种方式访问几个不同层次的结点) 随机访问XML文档 缺点: 对查找文档中的任意元素和属性支持不够-XPath 处理大文件效率低下 - XMLReader/XMLWriter/SAX,4.3 XML的读取器和书写器,4.3.1 使用XmlReader类读取XML,XMLReader提供了一种对XML数据快速
11、、非缓存、只向前、只读的访问方式 判断XML文档中某一节点的深度、是否具有属性、属性的个数及属性值 内存需求少 缺乏灵活的导航性能,4.3.2 使用XmlReader类读取XML数据的步骤:,使用XmlReader类的Create()方法创建该类的一个实例,并将被读取XML文件名称作为参数传入方法。 建立一个反复调用Read()方法的循环。这个方法从文件的第一个节点开始,然后读取所有余下的节点,但每次调用只读取一个节点。如果存在一个节点可被读取则返回True,而当到达文件最后时则返回False。 在这个循环中,将检查XmlReader对象的属性和方法,以获得关于当前节点的信息。不断地执行该循环
12、直到Read()返回False。,XmlReader类的重要属性,XmlReader类的重要方法,4.3.3 属性及方法的应用,(1)开始读取文档 /跳过XML声明,直接访问第一个元素 XmlReader reader = XmlReader.Create(Employees.xml); reader.ReadStartElement(); /reader.MoveToContent() /移动至下一个包含该属性的元素,但不读取,4.3.3 属性及方法的应用(续),(2)读取元素 Read()、ReadString()、 ReadStartElement()、 ReadEndElement()
13、 特点:读取元素后,都跳至文档中的下一个节点,4.3.3 属性及方法的应用(续),(3)读取属性 A. 通过属性名称或索引直接访问 B. MoveToAttribute() MoveToFirstAttribute() MoveToNextAttribute(),4.3.3 属性及方法的应用(续),(4)读取内容和其他数据 ReadString() Element:连接Element节点内的所有文本、有意义的空白和CDATA区域节点类型,并返回连接后的数据,作为Element节点的内容 Text: 与Element节点一样,在Text节点的结束标签上执行相同德连接操作 Attribute:返回
14、与Element节点一样的数据 其他:返回空字符串 ReadElementContentAsXXX(),4.3.3 属性及方法的应用(续),(5)使用XmlReader读取XML文件 编程:解析一个名为Employees.xml的静态XML文件,4.3.3 属性及方法的应用(续),(6)使用XmlReader读取XML文件中的数据 例: 处理保存在XML文件的每个元素和属性中的数据,4.3.3 属性及方法的应用(续),(7)配置XmlReader对象 演示使用XmlReaderStrings对象类配置XmlReader的输出,4.4写入XML数据,4.4写入XML数据(续),(1)开始和结束文
15、档 WriteStartDocument():写入XML文档的开始 WriteEndDocument():写入XML文档的结束, 关闭所有打开的属性和元素标签,4.4写入XML数据(续),(2)写入元素 A. WriteStartElement()和WriteEndElement()配对 B. WriteElementString():允许在同一时间写入元素的名称和它的内容。在使用这个函数的时候不能在元素中写入任何属性,writer.WriteStartElement(Name); writer.WriteElementString(FirstName, Nancy); writer.Writ
16、eEndElement();, Nancy ,4.4写入XML数据(续),(3)写入属性 WriteAttributeString() WriteStartAttribute()和WriteEndAttribute,Writer.WriteStartElement(“employee”); Writer.WriteStartAttribute(“id”); Writer.WriteString(“1”); Writer.WriteEndAttribute(); Writer.WriteEndElement(),4.4写入XML数据(续),(4)写入其他数据 WriteString():写入字符串内容到XML文件,用于写入元素和属性的内容,并自动将&等字符替换为相应的实体 WriteCData():写入CDATA区域至XML文件 WriteComment():插入XML注释至XML文件 WriteRaw():在输出中直接插入XML标记,但不保证标记是配对的