新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   >>中国XML论坛<<     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 关于 XML 的一般性技术讨论,提供 XML入门资料 和 XML教程
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XML基础 』 → XML初学进阶学习笔记[原创](整理完整版) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 33877 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: XML初学进阶学习笔记[原创](整理完整版) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 XML基础 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 

    35、对DOM树的操作::

    首先,我们要获取XML文档的根元素节点,用VBScript语言描述这个操作如下:

    root = myDocument.documentElement

    该语句的实际含义如下图黄色箭头所示。

    在得到了文档的根元素节点之后,我们又将如何访问其他元素呢?以文档中的第二个person元素为例,
    对该元素节点以及其子节点的访问可以通过下面的方式来实现:

    personNode = root.childNodes.item(1)
    nameNode = personNode.childNodes.item(0)
    textNode = nameNode.childNodes.item(0)
    theName = textNode.nodeValue

    上述访问语句执行后,theName的值是"李四"。下图黄色箭头给出了这一访问过程的示意:

    在上面的代码中,root是文档的根元素节点addressbook节点,
    personNode和nameNode都是元素类型的节点,textNode是TEXT类型的节点,theName是一个字符串。

    childNodes是NodeList类型的属性,item是NodeList接口中Node类型的属性,
    通过item可以访问NodeList节点集合中的任意节点(这儿有一点需要注意,
    当我们要访问根元素节点addressbook的第二个person子节点personNode时,
    我们用的索引参数是"1",这是因为item中的索引参数是从0开始的,如果我们要访问节点集合中的第一个节点,则应该用item(0)来表示)。

    在DOM规范中,要访问元素节点的文本内容,需要先得到元素节点的TEXT子节点,
    再通过TEXT节点的属性获取文本内容。微软在实现DOM接口时对DOM进行了部分扩展,
    可以通过元素类型节点的text属性直接获得元素中的文本内容。具体实用说明可以参考微软msdn中的帮助。

    上面的例子给出了如何访问DOM树中的元素节点,
    对于DOM树中的属性节点,访问方法略有不同,可以通过下面的语句来实现:

    attr = node.attributes.getNamedItem("sex")
    attrContent = attr.nodeValue

    上述访问语句执行后,attrContent的值是"male"。下图用黄色箭头标出了这一访问的过程。

    在上面的代码中,attr是属性类型的节点,attributes是NamedNodeMap类型的属性,
    getNamedItem是NamedNodeMap接口中的方法。属性的内容可以通过属性节点的nodeValue来获得。

    36、实现添加元素操作的语句如下:

    node = root.childNodes.item(0)                 //确定位置
    newNode = myDocument.createElement("company")  //创建节点
    node.insertBefore(newNode,node.lastNode)       //插入节点
    textNode = myDocument.creatTextNode("北大方正") //创建文本元素
    node.childNodes.item(1).appendChild(textNode)  //添加子元素(值)


    37、删除元素:
    node = root.childNodes.item(0)                        //确定位置
    oldNode = node.removeChild(node.childNodes.item(1))   //删除节点

    其中,oldNode中存放的是已被删除的节点。在删除某个节点时,
    以该节点为根的子树将整个被删除,因此得到的结果DOM树恢复原状。


    38、修改元素:

    假如想把张三的电子邮件地址更改为zhs@pku.edu.cn,通过下列语句就可以实现:

    node = root.childNodes.item(0)                               //查找节点
    emailNode = node.childNodes.item(0)                          //确定要修改元素位置
    emailNode.childNodes.item(0).nodeValue = zhs@pku.edu.cn      //替换元素


    39、SAX接口分析:
    SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。
    与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。
    当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,
    应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。

          SAX是一种事件驱动的接口,它的基本原理是由接口的用户提供符合定义的处理器,
          XML分析时遇到特定的事件,就去调用处理器中特定事件的处理函数。一般SAX接口都是用JAVA实现的,
          但事实上C++也可以用于实现SAX接口,只是C++的分析器比较少。之所以叫做"简单"应用程序接口,
          是因为这个接口确实非常简单,绝大多数事情分析器都没有做,需要应用程序自己去实现,
          因而开发者的任务也相应重一些。


    40、SAX分析器中的几个主要API接口作一简单的介绍。

    SAXParserFactory
    SAXParserFactory对象用来按照系统属性中的定义创建一个分析器的实例,接口是Javax.xml.parser. SAXParserFactory。

    Parser
    org.xml.sax.Parser接口定义了类似setDocumentHandler的方法来创建事件处理函数。
    另外,该接口中还定义了parser(URL)方法来对XML文档进行实际的分析工作。

    DocumentHandler
    当分析器遇到XML文档中的标记时,就会激活该接口中的startDocument,endDocument,startElement以及endElement等方法。
    另外,characters方法以及processingInstruction方法也是在DocumentHandler接口中实现的。
    当分析器遇到元素内部的文本内容时就会激活characters方法,当分析器遇到处理指令时就会激活processingInstruction方法。

    ErrorHandler
    当分析器在分析过程中遇到不同的错误时,ErrorHandler接口中的error、fatalError或者warning方法就会被激活。

    DTDHandler
    当处理DTD中的定义时,就会调用该接口中的方法。

    EntityResolver
    当分析器要识别由URI定义的数据时,就会调用该接口中的resolveEntity方法。

    一个典型的SAX应用程序至少要提供一个DocumentHandler接口。一个健壮的SAX应用程序还应该提供ErrorHandler接口。

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/3/15 10:23:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML基础 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/18 17:52:19

    本主题贴数12,分页: [1] [2]

     *树形目录 (最近20个回帖) 顶端 
    主题:  XML初学进阶学习笔记[原创](整理完整版)(3664字) - 卷积内核,2006年3月15日
        回复:  初学,了解(9字) - mike_fang,2008年5月26日
        回复:  ding~~~还是刚刚接触这个东西!迷茫ing(38字) - klzhuang,2007年11月29日
        回复:  替你顶起来 哈哈好东西哦怎么能沉了呢(42字) - minmin0876,2007年4月9日
        回复:  由于前段时间是边学边发,所以凌乱了一些,应广大兄弟姐妹建议今天整理一下,希望能多多交流,让我们论坛..(106字) - 卷积内核,2006年3月15日
        回复:  44、这种方案存在一个前提,那就是,开发者必须了解文档结构,并且通过编程严格控制输出文档的格式。..(7149字) - 卷积内核,2006年3月15日
        回复:  41、在关系数据库中,数据仅仅是数据,它不包含层次结构信息;而面向对象数据库可以将数据视为对象,..(2921字) - 卷积内核,2006年3月15日
        回复:  35、对DOM树的操作::首先,我们要获取XML文档的根元素节点,用VBScript语言描..(4502字) - 卷积内核,2006年3月15日
        回复:  28、对于XML应用开发来说,DOM就是一个对象化的XML数据接口,一个与语言无关、与平台无关的标..(4323字) - 卷积内核,2006年3月15日
        回复:  27、XML DOM初学者指南 总述:本文主要讨论如何利用XMLDOM访问和维护XML文..(11011字) - 卷积内核,2006年3月15日
        回复:  21、dt:typedt:type指定所声明属性的数据类型,它除了支持DTD中包含的全部十大数据..(4072字) - 卷积内核,2006年3月15日
        回复:  11、在定义元素时,ETD的顺序是无关紧要的。因此 <!ELEMENT 姓名(#PCDAT..(2764字) - 卷积内核,2006年3月15日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    109.375ms