XML DOM

2 篇文章 0 订阅
XML DOM介绍、例子以及Microsoft.xmldom api文档

  1.文档对象模型(DOM)
  DOM是HTML和XML文档的编程基础,它定义了处理执行文档的途径。编程者可以使用DOM增加文档、定位文档结构、填加修改删除文档元素。W3C的重要目标是把利用DOM提供一个使用于多个平台的编程接口。W3C DOM被设计成适合多个平台,可使用任意编程语言实现的方法。
  2.节点接口
  XML parser用来装载XML文档到缓存中,文档装载时,可以使用DOM进行检索和处理。DOM采用树形结构表示XML文档,文档元素是树的最高阶层,该元素有一个或多个孩子节点用来表示树的分枝。
  节点接口程序通常用来读和写XML节点树中的个别元素,文档元素的孩子节点属性可以用来构造个别元素节点。XML parser用来证明Web中的DOM支持遍历节点树的所有函数,并可通过它们访问节点和及其属性、插入删除节点、转换节点树到XML中。
  所有Microsoft XML parser函数得到W3C XML DOM的正式推荐,除了load和loadXML函数(正式的DOM不包括标准函数loading XML文档)。有13个节点类型被Microsoft XML parser支持,下面列出常用节点:
  节点类型例子
  Document type <!DOCTYPE food SYSTEM “food.dtd”>
  Processing instruction <?xml version=”1.0″?>
  Element <drink type=”beer”>Carlsberg</drink>
  Attribute type=”beer”
  Text Carlsberg
  3.使用XML parser
  为了更加熟练的处理XML文档,必须使用XML parser。Microsoft XML parser是IIS5.0所带的一个COM组件,一旦安装了IIS5.0,parser可以利用HTML文档和ASP文件中的脚本。
  Microsoft XMLDOM parser支持以下编程模式:
  —-支持JavaScript, VBScript, Perl, VB, Java, C++ 等等
  —-支持W3C XML 1.0 和XML DOM
  —-支持DTD 和validation
  如果使用IE5.0中的JavaScript,可以使用下面的XML文档对象:
  var xmlDoc = new ActiveXObject(”Microsoft.XMLDOM”)
  如果使用VBScript,可以使用下面的XML文档对象:
  set xmlDoc = CreateObject(”Microsoft.XMLDOM”)
  如果使用ASP,可以使用下面的XML文档对象:
  set xmlDoc = Server.CreateObject(”Microsoft.XMLDOM”)
  4.装载一个XML文件到parser中
  下面的代码装载存在的XML文档进入XML parser:
  <script language=”JavaScript”>
  var xmlDoc = new ActiveXObject(”Microsoft.XMLDOM”)
  xmlDoc.async=”false”
  xmlDoc.load(”note.xml”)
  // ……. processing the document goes here
  </script>
  第一行脚本增加了一个Microsoft XML parser实例,第三行装载名为”note.xml”的XML文档进入parser中。第二行保证文档装载完成以后parser进行下一步工作。
  5. parseError对象
  打开XMl文档时,XML Parser产生错误代码,并存在parseError对象中,包括错误代码、错误文本和错误行号,等信息。
  6.文件错误
  下面的例子将试图装载一个不存在的文件,然后产生相应的错误代码:
  var xmlDoc = new ActiveXObject(”Microsoft.XMLDOM”)
  xmlDoc.async=”false”
  xmlDoc.load(”ksdjf.xml”)
  document.write(”<br>Error Code: “)
  document.write(xmlDoc.parseError.errorCode)
  document.write(”<br>Error Reason: “)
  document.write(xmlDoc.parseError.reason)
  document.write(”<br>Error Line: “)
  document.write(xmlDoc.parseError.line)
  7.XML错误
  下面使用不正确的格式装载XMl文档,
  var xmlDoc = new ActiveXObject(”Microsoft.XMLDOM”)
  xmlDoc.async=”false”
  xmlDoc.load(”note_error.xml”)
  document.write(”<br>Error Code: “)
  document.write(xmlDoc.parseError.errorCode)
  document.write(”<br>Error Reason: “)
  document.write(xmlDoc.parseError.reason)
  document.write(”<br>Error Line: “)
  document.write(xmlDoc.parseError.line)
  8. parseError属性
  属性描述:
  errorCode 返回长整型错误代码
  reason 返回字符串型错误原因
  line 返回长整型错误行号
  linePos 返回长整型错误行号位置
  srcText 返回字符串型产生错误原因
  url 返回url装载文档指针
  filePos 返回长整型错误文件位置
  9.遍历节点树
  一种通用的析取XML文档的方法是遍历节点树和它的元素值。下面是使用VBScript写的遍历节点树的程序代码:
  set xmlDoc=CreateObject(”Microsoft.XMLDOM”)
  xmlDoc.async=”false”
  xmlDoc.load(”note.xml”)
  for each x in xmlDoc.documentElement.childNodes
  document.write(x.nodename)
  document.write(”: “)
  document.write(x.text)
  next
  10.为XML文件提供HTML格式
  XML的一个优点是把HTML文档和它的数据分离开。通过使用浏览器中的XML parser,HTML页面可以被构造成静态文档,通过JavaScript提供动态数据。下面的例子使用JavaScript读取XML文档,写XML数据成HTML元素:
  var xmlDoc = new ActiveXObject(”Microsoft.XMLDOM”)
  xmlDoc.async=”false”
  xmlDoc.load(”note.xml”)
  nodes = xmlDoc.documentElement.childNodes
  to.innerText = nodes.item(0).text
  from .innerText = nodes.item(1).text
  header.innerText = nodes.item(2).text
  body.innerText = nodes.item(3).text
  11.通过名称访问XML元素
  下面的例子使用JavaScript读取XML文档,写XML数据成HTML元素:
  var xmlDoc = new ActiveXObject(”Microsoft.XMLDOM”)
  xmlDoc.async=”false”
  xmlDoc.load(”note.xml”)
  document.write(xmlDoc.getElementsByTagName(”from”).item(0).text)
  12.装载纯XML文本进入parser
  下面的代码装载文本字符串进入XML parser :
  <script language=”JavaScript”>
  var text=”<note>”
  text=text+”<to>Tove</to><from>Jani</from>”
  text=text+”<heading>Reminder</heading>”
  text=text+”<body>Don’t forget me this weekend!</body>”
  text=text+”</note>”
  var xmlDoc = new ActiveXObject(”Microsoft.XMLDOM”)
  xmlDoc.async=”false”
  xmlDoc.loadXML(text)
  // ……. processing the document goes here
  </script>
  13.装载XML进入Parser
  <html>
  <body>
  <script language=”javascript”>
  var xmlDoc = new ActiveXObject(”Microsoft.XMLDOM”)
  xmlDoc.async=”false”
  xmlDoc.load(”note.xml”)
  document.write(”The first XML element in the file contains: “)
  document.write(xmlDoc.documentElement.childNodes.item(0).text)
  </script>
  </body>
  </html>
  遍历XML节点树:
  <html>
  <body>
  <script language=”VBScript”>
  txt=”<h1>Traversing the node tree</h1>”
  document.write(txt)
  set xmlDoc=CreateObject(”Microsoft.XMLDOM”)
  xmlDoc.async=”false”
  xmlDoc.load(”note.xml”)
  for each x in xmlDoc.documentElement.childNodes
  document.write(”<b>” & x.nodename & “</b>”)
  document.write(”: “)
  document.write(x.text)
  document.write(”<br>”)
  next
  </script>
  </body>
  </html>
  装载XML 进入HTML
  <html>
  <head>
  <script language=”JavaScript”
  for=”window” event=”onload”>
  var xmlDoc = new ActiveXObject(”Microsoft.XMLDOM”)
  xmlDoc.async=”false”
  xmlDoc.load(”note.xml”)
  nodes = xmlDoc.documentElement.childNodes
  to.innerText = nodes.item(0).text
  from.innerText = nodes.item(1).text
  header.innerText = nodes.item(2).text
  body.innerText = nodes.item(3).text
  </script>
  <title>HTML using XML data</title>
  </head>
  <body bgcolor=”yellow”>
  <h1>Refsnes Data Internal Note</h1>
  <b>To: </b><span id=”to”></span>
  <br>
  <b>From: </b><span id=”from”></span>
  <hr>
  <b><span id=”header”></span></b>
  <hr>
  <span id=”body”></span>
  </body>

  </html>

'取得根节点
set dom=CreateObject("microsoft.xmldom")
dom.async=false
dom.load "c:\user.xml" 

set book1=rootNode.childNodes(1)
book1.ownerDocument 返回Document节点指向XML文档本身
book1.previousSibling 前一个节点
book1.parentNode 父节点
book1.firstChild 第一个子节点
book1.lastChild 最后一个子节点
book1.childNodes 子节点集合 

'添加节点
set node=rootNode.childNodes.item(0)
set newNode=myDocument.createElement("publisher")
set rtnNode=node.insertBefore(newNode,node.lastChild)
set textNode=myDocument.createTextNode("人民邮电出版社")
node.childNodes.item(1).appendChild(textNode) 

'删除节点
set node=root.childNodes.item(0)
set oldNode=node.removeChild(node.childNodes.item(4)) 

'修改节点 
set node=root.childNodes.item(0)
node.nodeValue="158" 

'常用DOM的方法 
createAttribute(属性的名字) 创建一个属性节点然后可以用setAttributeNode方法把该属性设置为某个元素的属性
createCDATASection(内容) 创建一个CDATA节点createMessage(内容) 创建一个注释节点值就是参数内容
createElement(名字) 创建元素节点
createEntityReference(名字) 创建一个实体引用节点如果被引用的实体是已知的那么该实体引用节点和相应的实体节点有同样的子节点集
createProcessingInstruction(处理指令的目标部分处理指令的数据部分) 创建一个具有指定名字和数据的处理指令节点
createTextNode(内容) 创建一个具有指定内容的文本节点 
Node的常用属性 
attributes
childNodes 子节点的集合
firstChild 第一个子节点 
lastChild 最后一个子节点
previousSibling 当前节点的前驱节点
nextSibling 当前节点的后继节点
nodeName 当前节点的名字
nodeType 节点类型
nodeValue 节点的值
parentNodes 父节点 
Node方法
appendChild(newChild) 添加到所有子节点的最后返回添加的节点
cloneNode(boolean deep) 复制当前节点复制产生的节点没有父节点返回复制的节点
hasChildNodes 无参数判断是否有子节点
createElement 创建元素节点
insertBefore(newChild,refChild) 把节点newChild插入到当前节点的子节点refChild之前返回插入的节点
removeChild(oldChild) 把子节点oldChild删除并返回oldChild节点replaceChild(newChild,oldChild) 替换节点返回被删除的节点 
NodeList
是动态的对文档的改变会直接反映到相关的NodeList对象中
属性length
Item(0)-Item(nodeList.length-1) 
NamedNodeMap
包含的节点是无序的表示节点和唯一名字的对应关系属性length
方法getNamedItem(name) 返回给定名称的节点
item(0...) 
removeNamedItem(name) 删除给定名称的节点
setNamedItem(name) 把给定节点名的节点添加到当前节点集中如果改名字节点已经存在替换 
ASP通过XMLDom在服务器端操作XML文件的主要方法和实现
对于小数据量xml文件在检索更新上于ACCESS有很多优势我曾经测试过不用数据库把网站的会员信息商品数据信息交易信息网站定制信息全部存放在三个xml文件中运行结果十分正常感觉上比数据库快多了不过没有作测试不能确定
下面说一下创建查询修改等对xml操作的主要方法
'创建DOM对象
set objDom=server.CreateObject("MicroSoft.XMLDom")
'取得xml数据
'方法1 取得xml文件的xml数据
objDom.load("c:\test.xml")
'方法2 取得xml数据串的数据
objDom.loadxml("<people><man name="sd"/></people>") 
'创建一个节点对象
Set Newnode=objDom.CreateElement("people")
'给这个节点赴值
Newnode.Text="人"
' 给这个节点添加属性
Set NewAttribute=objDom.CreateNode("attribute","name","") 
NewAttribute.Text= "张三"
Newnode.SetAttributeNode NewAttribute
'给这个节点添加子节点
Set NewnodeChild=objDom.CreateElement("address")
Newnode.appendChild NewnodeChild
'保存这个节点对象
objDom.appendChild Newnode
objDom.save("c:\test.xml")
'查找一个节点对象
set objtofind=objdom.documentElement.SelectSingleNode("//people/man")
'取出这个节点对象的 节点名,节点值,某个属性值,和全部的xml
nodename=objtofind.nodename
nodevalue=objtofind.text
objtofind.GetAttributeNode("name").Nodevalue ’属性名为name的属性值
'取出一个属性节点对象
set objattrtofind=objdom.documentElement.SelectSingleNode("//people/man"). GetAttributeNode("name")
'取出这个节点的属性名,属性值
nodeattrname=objattrtofind.nodename
nodeattrvalue=objattrtofind.nodevalue
'删除一个节点对象
set objnode=objdom.documentElement.SelectSingleNode("//people/man") ’要删除的节点
set objparentnode=objdom.documentElement.SelectSingleNode("//people") ’要删除的节点的父节点
objparentnode.removeChild objnode
'取出一个节点的字节点集合
set objnodes=objdom.documentElement.SelectSingleNode("//people/man").ChildNodes 

'遍历这个集合
'方法1 
for each element in objnodes
response.write element.nodename 字节点名
response.write element.text 字节点值 
next
'方法2
domlength=objnodes.length
for i = 0 to domlength-1
response.write objnodes.childnodes(i).nodename 字节点名
response.write objnodes.childnodes(i).text 字节点值
next 
'取出一个节点的属性集合
set objnodes=objdom.documentElement.SelectSingleNode("//people/man").GetAttributeNode("name").attributes 
'遍历这个集合
for each element in objnodes
response.write element.nodename 属性名
response.write element.nodevalue 属性值
next

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值