dom

1.文档对象模型(DOM)小木虫学术博客,m|2W;^n9Q9x}  DOM是HTML和XML文档的编程基础,它定义了处理执行文档的途径。编程者可以使用DOM增加文档、定位文档结构、填加修改删除文档元素。W3C 的重要目标是把利用DOM提供一个使用于多个平台的编程接口。W3C DOM被设计成适合多个平台,可使用任意编程语言实现的方法。IB c+}KS6LO e3O0  2.节点接口wF,rS J:n&y9Y0  XML parser用来装载XML文档到缓存中,文档装载时,可以使用DOM进行检索和处理。DOM采用树形结构表示XML文档,文档元素是树的最高阶层,该元素有一个或多个孩子节点用来表示树的分枝。A+Z9Q#L W(n-@ Vhko0  节点接口程序通常用来读和写XML节点树中的个别元素,文档元素的孩子节点属性可以用来构造个别元素节点。XML parser用来证明Web中的DOM支持遍历节点树的所有函数,并可通过它们访问节点和及其属性、插入删除节点、转换节点树到XML中。小木虫学术博客R0|%{$^ SH&rM%I2S G2^  所有Microsoft XML parser函数得到W3C XML DOM的正式推荐,除了load和 loadXML函数(正式的DOM不包括标准函数loading XML文档)。有13个节点类型被Microsoft  XML parser支持,下面列出常用节点:小木虫学术博客1pL1N N*v m  节点类型例子小木虫学术博客)~dyo1Yd  Document type <!DOCTYPE food SYSTEM "food.dtd"> 小木虫学术博客)T_9Qk K#v]N$y d  Processing instruction <?xml version="1.0"?> 4X-uR4L:t v|./0  Element <drink type="beer">Carlsberg</drink> *|+n9t3s%bX$t0  Attribute type="beer" !Pk%VNVW/Id#k0  Text Carlsberg  P7Z/(o ^0   mFwM.G V'Ym2hC03.使用XML parser.V?1M,f7W0  为了更加熟练的处理XML文档,必须使用XML parser。Microsoft XML parser是IIS5.0所带的一个COM组件,一旦安装了IIS5.0,parser可以利用HTML文档和ASP文件中的脚本。小木虫学术博客1Sqj7Ix0E%M  Microsoft XMLDOM parser支持以下编程模式:小木虫学术博客-d:Q`-l3^1Kr6{  ----支持JavaScript, VBScript, Perl, VB, Java, C++ 等等r'/ _2i*/uG lj0  ----支持W3C XML 1.0 和XML DOM 小木虫学术博客x I~Q1`#HU#F&|$N  ----支持DTD 和validation %id [O U F;_x'nq0  如果使用IE5.0中的JavaScript,可以使用下面的XML文档对象:小木虫学术博客}'l/"ss/b  var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")小木虫学术博客 ]+P#n'L$RPY_,Q  如果使用VBScript,可以使用下面的XML文档对象:小木虫学术博客@3k+M za%Eo4Za  set xmlDoc = CreateObject("Microsoft.XMLDOM")K$~*tFZ:k[:I#g0  如果使用ASP,可以使用下面的XML文档对象:K-h|T pq[/|0  set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") 小木虫学术博客j.e!o1H4SZ%l4.装载一个XML文件到parser中小木虫学术博客"|!eG/I3AA7H   下面的代码装载存在的XML文档进入XML parser:f-u2e4VyV0kM(c0   <script. language="JavaScript">I(ka`8w0   var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")小木虫学术博客@/N iCg+S)R   xmlDoc.async="false"z5r6V8F.ND(G Q0   xmlDoc.load("note.xml").c;r$ps;Q y0   // ....... processing the document goes here小木虫学术博客&b4s0`6j$Qw/s+j   </script>h3jH-r/l-S+Dy)k9T.S0   第一行脚本增加了一个Microsoft XML parser实例,第三行装载名为”note.xml”的XML文档进入parser中。第二行保证文档装载完成以后parser进行下一步工作。8i6i-s{)j [Sd"Hn+/0   5. parseError对象]~/L6d1S{;^ ZP0   打开XMl文档时,XML Parser产生错误代码,并存在parseError对象中,包括错误代码、错误文本和错误行号,等信息。@1} YY8W {}q0   6.文件错误6Fa6xq(~.A0   下面的例子将试图装载一个不存在的文件,然后产生相应的错误代码:小木虫学术博客 ~3XK(f2x!S   var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")J"k%n*Ul3W0   xmlDoc.async="false"小木虫学术博客*_-JID6~ N0Y%c   xmlDoc.load("ksdjf.xml")小木虫学术博客8kUn0Q/^|G   document.write("<br>Error Code: ")vqh'W H0`0   document.write(xmlDoc.parseError.errorCode)1|xM M8h8Y0   document.write("<br>Error Reason: ")pMl%x2@7E|)w0   document.write(xmlDoc.parseError.reason)9n_ B*Ql/4b0   document.write("<br>Error Line: ")%}"AMOd w(C0   document.write(xmlDoc.parseError.line)小木虫学术博客HFb/Q(^/D   7.XML错误小木虫学术博客 ^q+o4aw `AH$i   下面使用不正确的格式装载XMl文档,小木虫学术博客q,M*fp*S   var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")~:i%P`n6r1g0   xmlDoc.async="false"K.lx},{:L,S0   xmlDoc.load("note_error.xml")小木虫学术博客/g6U;{~y   document.write("<br>Error Code: ")j ]%_6g `.C6wi0   document.write(xmlDoc.parseError.errorCode)小木虫学术博客Mc3v*XYMjR"H   document.write("<br>Error Reason: ")uJ!{"Gd0   document.write(xmlDoc.parseError.reason)0H%mvPI#SyE0   document.write("<br>Error Line: ")小木虫学术博客&j.d3Q(/ }Vu   document.write(xmlDoc.parseError.line)小木虫学术博客 z},nE&C*Nu   8. parseError属性小木虫学术博客q Uw[0th;R-J$_;T   属性描述:小木虫学术博客w~m WvQ$?   errorCode 返回长整型错误代码t"H&i~9elY/_;{[0   reason 返回字符串型错误原因小木虫学术博客vow3f$b   line 返回长整型错误行号Y8YX+e,ik0   linePos 返回长整型错误行号位置J7lt-Y}"O4W0   srcText 返回字符串型产生错误原因小木虫学术博客/LVx#] DJm   url 返回url装载文档指针:J0Ks7z0I6M+AD0   filePos 返回长整型错误文件位置*afMr iI dt0   9.遍历节点树小木虫学术博客&OAQA%_ s:d a   一种通用的析取XML文档的方法是遍历节点树和它的元素值。下面是使用VBScript写的遍历节点树的程序代码:小木虫学术博客3_i4s-bY*Xg0?   set xmlDoc=CreateObject("Microsoft.XMLDOM")小木虫学术博客ji7s:Tte   xmlDoc.async="false"6Tj_5g u{'?`j0   xmlDoc.load("note.xml")小木虫学术博客?-m"H&al {g(c   for each x in xmlDoc.documentElement.childNodes小木虫学术博客LJk;zj$I R]   document.write(x.nodename)小木虫学术博客N^e%U9A v   document.write(": ")小木虫学术博客+]8v sI%eB(](P9AX   document.write(x.text)小木虫学术博客o+~8_5d`gz   next 小木虫学术博客(n#lR6e3d   10.为XML文件提供HTML格式小木虫学术博客r2/P3D G1jkuB   XML的一个优点是把HTML文档和它的数据分离开。通过使用浏览器中的XML parser,HTML页面可以被构造成静态文档,通过JavaScript提供动态数据。下面的例子使用JavaScript读取XML文档,写XML数据成HTML元素:小木虫学术博客/ HF#Sx.h   var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")小木虫学术博客 szvq.Fc/g e/t   xmlDoc.async="false"%Uae`&p wm*Up0   xmlDoc.load("note.xml")`t] V;c {9S V0   nodes = xmlDoc.documentElement.childNodesR;HB ~9s0_'ZUv-G0   to.innerText = nodes.item(0).text小木虫学术博客)s1G}a.|i[   from .innerText = nodes.item(1).text小木虫学术博客7lJrD G7n2z;Z+v1p   header.innerText = nodes.item(2).text1P.f$|0h&TJ$d0   body.innerText = nodes.item(3).text小木虫学术博客_3])B,R*T   11.通过名称访问XML元素小木虫学术博客 T.PlV z9bh   下面的例子使用JavaScript读取XML文档,写XML数据成HTML元素:小木虫学术博客]HzX lqq   var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")b/s /)R w5N z7`J Z0   xmlDoc.async="false"oKD.X+sc3j0   xmlDoc.load("note.xml")%D g(n3rk oo&b1v0   document.write(xmlDoc.getElementsByTagName("from").item(0).text)小木虫学术博客#{3y8B1UV5O.NGjx|   12.装载纯XML文本进入parser 'IXW+Vo7t#~0   下面的代码装载文本字符串进入XML parser :小木虫学术博客 gwu/r`rM   <script. language="JavaScript">(a7YFTx+z0   var text="<note>"小木虫学术博客m2?*s8?(K(RK)M   text=text+"<to>Tove</to><from>Jani</from>"6c x~-c:GP]0   text=text+"<heading>Reminder</heading>"0|K)l%^0b0   text=text+"<body>Don't forget me this weekend!</body>"小木虫学术博客B%y4g6o$U"N V$^k5M `   text=text+"</note>"小木虫学术博客R.I+tLl   var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")小木虫学术博客,@&Z9tf/R'I   xmlDoc.async="false"小木虫学术博客i,k0Q7_L/JI x   xmlDoc.loadXML(text)TbyJ#Ur0   // ....... processing the document goes here小木虫学术博客*YV$e~k'Y   </script>{%V#Psj s;/%[0   13.装载XML进入Parser 小木虫学术博客p9? O.O,a!o|   <html>hN"^D ~N"T#T(N$I3R0   <body>3bW!E fWB0   <script. language="javascript">小木虫学术博客d@ BR,{-h9e   var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")小木虫学术博客 rz%pp6h,?$jZ   xmlDoc.async="false"+j~DQ(Zjyj]h)u}0   xmlDoc.load("note.xml")小木虫学术博客)g8A i s h c ]   document.write("The first XML element in the file contains: ")小木虫学术博客1F]L F DJ   document.write(xmlDoc.documentElement.childNodes.item(0).text)小木虫学术博客7V*O&?Do Z+G:X   </script>F]2NK"Lgk0   </body>luG tCyu0   </html>小木虫学术博客'_XX*w-Yy7c        遍历XML节点树:小木虫学术博客f/q!s }@ c@W   <html>小木虫学术博客s5A,c/U6_.b   <body>3j8o"G C&j0   <script. language="VBScript">小木虫学术博客 ^ W vIbn1N|g   txt="<h1>Traversing the node tree</h1>"/;XfD:F0   document.write(txt)(V`+rZ K1F8QS5O2u0   set xmlDoc=CreateObject("Microsoft.XMLDOM")%T3@e1K0@ ] opxa0   xmlDoc.async="false"小木虫学术博客 /%c6p2H-`(W/   xmlDoc.load("note.xml")小木虫学术博客/8S8z+mHm l)EI   for each x in xmlDoc.documentElement.childNodes小木虫学术博客 ?%f%q'U N^ e o   document.write("<b>" & x.nodename & "</b>")eY%rPKz0   document.write(": ")+N!O3t U']j0f6~0   document.write(x.text)小木虫学术博客7[gYA5n&n   document.write("<br>")/?b oL4Fg0   next小木虫学术博客x+y3tw}_,k   </script>小木虫学术博客,LvjhPe8Q   </body>u7K[&a~3@6Hh0   </html> 小木虫学术博客 / ~Fy'I$^_~H0A{1q   装载XML 进入HTML 小木虫学术博客BoJ*c;@Z]D   <html>小木虫学术博客v K R'xQ:W   <head>小木虫学术博客(Y[*nSLi@-e   <script. language="JavaScript"小木虫学术博客4K!XF4Q5N   for="window" event="onload">i8a(nhUr#q w2dJ W:I0   var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")x'pS8~j'D;t0   xmlDoc.async="false"+C)J6S] o eQVJ0   xmlDoc.load("note.xml")小木虫学术博客E8pLi4k]J7j4a:O   nodes = xmlDoc.documentElement.childNodes%ZH!VLoa/L.Z+Ik0   to.innerText = nodes.item(0).text小木虫学术博客[XIlaxtO   from.innerText = nodes.item(1).text/b ~*u0Zj&X0   header.innerText = nodes.item(2).textz,i;tt_6HE0   body.innerText = nodes.item(3).text$F.HZ8z X ^K u+m0   </script>小木虫学术博客/m1{el1[ q0h ^e`   <title>HTML using XML data</title>vv1d hT%o7a*GC!V0   </head>4j'o)ri{D"x0   <body bgcolor="yellow">H(i0])|Z f*l(f7[0   <h1>Refsnes Data Internal Note</h1>~0X A#gO7sSw0   <b>To: </b><span id="to"></span>}G{2{Q'B Ie+T&l0   <br>,BO/c~Wy0   <b>From: </b><span id="from"></span>小木虫学术博客~Iojt   <hr>小木虫学术博客F d6v"bl*y   <b><span id="header"></span></b>Cn,{c.vF"hToM0   <hr>小木虫学术博客ky7B.mFk]'z   <span id="body"></span>zj7w(Y3Cu0   </body>小木虫学术博客w8iP Qz-U;A!v"bQ   </html>  1、DOM树 X[C1tC)G8T.f)`0所有类型的XML解析器都要求处理对象是“格式良好”的XML文档,有些还能根据DTD或XML Schema进行有效性验证,DOM (Document Object Model)解析器将XML文档一次性解析,生成一个位于内存中的对象树用以描述该文档。  1x ~E|2II it0DOM是一种与平台和语言无关的接口,它允许程序和脚本动态访问和修改文档的内容、结构和类型。它定义了一系列的对象和方法对DOM树的节点进行各种随机操作:  小木虫学术博客V-N+k9Ybf● Document对象:作为树的最高节点,Document对象是对整个文档进行操作的入口。 小木虫学术博客g,R+Qm,`● Element和Attr对象:这些节点对象都是文档某一部分的映射,节点的定级层次恰好反映了文档的结构。 小木虫学术博客 aP/~1?b9I● Text对象:作为Element和Attr对象的子节点,Text对象表达了元素或属性的文本内容。Text节点不再包含任何子节点。 L+qB i{@K V#sO^0● 集合索引:DOM提供了几种集合索引方式,可以对节点按指定方式进行遍历。索引参数都是从0开始记数的。 .T&QR;{FwQ0DOM树中的所有节点都是从Node对象继承而来的。Node对象定义了一些最基本的属性和方法,利用这些方法可以实现对树的遍历,同时,根据属性还可以得知节点的名称、取值并判断其类型。 0oXn$px?;d0利用DOM,开发人员可以动态地创建XML、遍历文档、增加/删除/修改文档内容。DOM提供的API与编程语言无关,所以对一些DOM标准中没有明确定义的接口,不同解析器的实现方法也可能有所差别。为方便描述,本文的举例均采用MSXML DOM方案并用VB Script编写代码。  小木虫学术博客"/~$g^ L2、DOM树的结构 小木虫学术博客 y{8z`J0W,FNIX_Document对象建立之后,就可以与XML文档或数据岛联系在一起。数据岛的加载方法是将数据岛ID赋给Document对象: gdY]"|^I8T$Pq0<XML ID=“dsoDetails” src=“Books.xml”></XML> :k4z u!YXl7W0Set doc = dsoDetails.XMLDocument |6gA,r["QZ|F i0加载文档大体上分为三步: 3{]+qjeH#U2N1Z01.使用CreateObject方法创建分析器实例; q)e.rGhqv02.设置async属性为False,禁止异步加载,这样当文档加载完毕,控制权才会返回给调用进程,如果想获取文档加载状态,可以读取readyState属性值; 小木虫学术博客:Mq5L-D pZ QB3.使用load方法加载指定文档。 /|`_/CV/9U+J0Set doc = CreateObject(“Microsoft.XMLDOM”) 小木虫学术博客G)Xo.k"M'SlF'N%`doc.async = False Eq#Em1a%tG/V0doc.load “Books.xml” LP*M2@t T/i3Mq-Y0XML DOM还提供了一种loadXML的方法可以把XML字符串加载到DOM树中,使用时只要把XML字符串直接作为该方法的参数即可。  ] XH]n9BF+i*`03、DOM树的访问 小木虫学术博客 c;TDu zN bX2p在文档加载完毕之后就可以使用documentElement属性访问根元素: 小木虫学术博客j /7v+Kl ?;[8fSet rootNode = doc.documentElement 小木虫学术博客;{ PX$U@U2~7Q一旦建立了对DOM树中某个节点(例如根节点)的引用,就可以根据节点间的等级关系调用适当的方法进行遍历。 小木虫学术博客|-a [)A"Z@%`+c]@下面以books.xml为例说明各种方法的使用: 小木虫学术博客 dL;R4HD"B8z/s<xml id=“dsoBooks”> i/U3G,x7d y"{t;t^_0<?xml version=“1.0”?>小木虫学术博客us0r0ze$t<booklist> <book> 小木虫学术博客 DC@X't0/:V<title>The Gourmet Microwave</title>  小木虫学术博客'cbon2O o;f l"J4M<price>9.95</price> v;i9Y#@P0<author>Charlotte M. Cooper</author> -k8y)[D1E-g0<author>Shelley B. Burke</author> 小木虫学术博客F!b-t:WF rO<author>Regina P. Murphy</author> c?"~'A5J(S_@7`0</book> <book> 小木虫学术博客V)uRkB'q5u<title>Sushi, Anyone?</title>  (V,Wr F!o EF8S0<price>14.99</price>小木虫学术博客$W0T:LuH)p I w</book> <book> 小木虫学术博客Kn6Di x/?<title>Straight Talk About Computers</title>^_~n,F0 <price>19.99</price> k+N0v2SP-v0<author>Lars Peterson</author> [O9h^1IHP5_b0</book> </booklist></xml> 小木虫学术博客q-J{5abS'e建立对第二个<book>元素的引用: 小木虫学术博客 qU3PZ/JV/])fSet theNode =dsoBooks.XMLDocument.documentElement.childNodes(1) ;~#Gy:T'OC?0VH0● 根节点:theNode.ownerDocument返回Document节点,指向XML文档本身; (F%k-L2A#y0z0● 兄弟节点:theNode.previousSibling返回第1个<book>元素,theNode.nextSibling返回第3个<book>元素; 小木虫学术博客;Kt|/{ Tye1Nl9TW● 父节点:theNode.parentNode返回<booklist>元素; 小木虫学术博客DK1ay*m.aL+i:i● 子节点:theNode.firstChild返回<title>元素,theNode.lastChild返回< price>元素,theNode.childNodes返回子节点集合,包括Sushi下面的所有元素。节点记数从0开始,即 theNode.childNodes(0)的结果与theNode.firstChild的结果是一样的。 小木虫学术博客4V r$n M?+?/_*J4J2j获得节点的引用后,就可以读取节点的相关信息: d N Z0~9f&]0/9r0● 节点类型:theNode.nodeType,本例为1,Document对象类型为9,元素类型为1,属性类型为2; 2} t`5EC0● 节点名称:theNode.nodeName,本例为book; 小木虫学术博客A[7c1q Yr%p● 节点值:theNode.nodeValue,本例为null,对于Attr节点,返回的是属性值,而对于Element节点,返回的是null。 小木虫学术博客0M0J@;ek在MSXML中,对Node对象还提供了一些额外的方法和属性: 小木虫学术博客 Y#hs#iG8c● nodeTypeString:用字符串的方式显示节点类型,如theNode.nodeTypeString的结果是“element”; 小木虫学术博客3qV8_!y y/Mf._i● text: 显示当前节点及其所有子节点的文本内容; 小木虫学术博客c-WU UZ$?3Qv5pQ● xml:获取XML文档数据,通常是从根元素开始的所有内容。 /E{^&H3Pj'i!hc04、XML格式的动态转换 小木虫学术博客n4n_9Ef7c通过学习XSL,我们已经能够使用样式单对XML文档进行转换。但这种过程是静态的,即在编写代码时,已经指定了作用在XML上的XSL文件,在程序运行过程中不能再做改变。而利用DOM,我们能够实现XML格式的动态转换,即在程序运行时,将XSL载入并对XML文档进行转换。 j7k;YUoT"?,p0把XSL载入DOM对象的步骤基本上与XML文档的载入过程是一样的(XSL本身就是XML文档): *tH,s%]6]({ w/[1Vz0Set stylesheet = CreateObject(“Microsoft.XMLDOM”) 7Z"` n"vgU.bWmfj0stylesheet.async = False /}J8P+M w _Y0stylesheet.load “TransformDetails.xsl” L4B+z+A t:b0DOM提供了两个函数进行这种转换,作用对象可以是树中任何节点。这样就可以实现对DOM树的任意的部分进行格式转换。 (n/I C3D Fp[0● transformNodeToObject方法:该方法需要两个参数,第一个参数指向XSL文件,第二个参数存放转换后的XML数据的节点。例如: 0^3K%Fz(d#Vn:/3g(S5O*B0Set targetNode = CreateObject(“Microsoft.XMLDOM”) Ln{2y nd/b0srcNode.transformNodeToObject stylesheet, targetNode ,Yew[*D7D0U0● transformNode方法:该方法只需要一个参数指明XSL文件。如下例是将源节点转换为一个字符串变量str: #{;lr `$v:sbL0str = srcNode.transformNode(stylesheet)  1、DOM解析时的错误 H0]-f|h0DOM在解析XML文档的时候可能会产生各式各样的错误,可以根据ParseError对象中的属性得知出错的可能原因及相关信息。 小木虫学术博客,{Bp#vy;/Z0QU常用的属性及其含义如下表所示: 小木虫学术博客g'nQ K*^b-g属性 说明 1g&|]8D0y0errorCode 错误代码 小木虫学术博客L'R%k} Q uF[ Yfilepos 错误在文档中的绝对字符位置 1}0? E,m@FY'@z2D!r0line 错误所在行的行号 小木虫学术博客)x7^e"~N"M?6nlinepos 错误所在行的字符位置 小木虫学术博客 _VZ5S!o^8y;~ treason 错误产生原因 小木虫学术博客 ~0?} B'A7s@"R#{XsrcText 错误所在行的源代码 -H0B#e7tDI d:b0url 最近一份含有解析错误的XML文档的URL地址 小木虫学术博客3TR4`d-^2RR/V 小木虫学术博客JxSI D3/'l2h )S F#g`;C'{-@ T02、访问DOM树中的元素与属性 y^(ir0a+~0DOM还提供了许多查找节点的方法。其中基于搜索机制的方法有: 小木虫学术博客 Y Ju:fD● 根据标签名称搜索元素; NdgN eK0● 使用XSL模式搜索节点; %nW0YP_N0● 利用集合索引搜索节点。 :/:v0M:wP `h-N%]o"V0以books.xml为例,Document对象中的getElementsByTagName方法就是根据参数中的标签名称在全文范围内查找元素的,返回值是一个NodeList对象: 小木虫学术博客4]y:bOd;e"T&c8~JSet doc = dsoDetails.XMLDocument  %i7v ?7r.R0DTF0Set authors = doc.getElementsByTagName(“author”) "r*/I/G Nh8/0上述查询结果中包含了文档中出现的全部4位作者。如果调用的是Element对象中的getElementsByTagName方法,除了搜索范围缩小为该元素的所有后继节点之外,其他的情况都是一样的。 5{lCiB+kd8T ?0所有类型的节点都带有selectNodes方法,该方法的唯一参数是XSL的模式规则,返回值是匹配该规则的结果集合。调用这个方法可以利用XSL的模式匹配策略查找节点。例如: m.K+@!e R'e Lr0Set rootNode = doc.documentElement  小木虫学术博客T SQ}/K}/B I:xSet cheapbooks = rootNode.selectNodes(“//book[price < 10]”) 小木虫学术博客,y#S1M|?+k:N这个例子返回所有售价低于10元的<book>元素。另外,节点中的selectSingleNodes方法的用法与selectNodes是一样的,只是返回结果为查找到的满足条件的第一个节点而已。 _4~r&L j%N{0对于元素节点,获取元素标签名称的方法有两种:anyElement.nodeName和anyElement.tagName。前者是Node对象的属性,后者是Element对象的属性。 小木虫学术博客t P$dbHs如果想获取元素中的文本内容,如: <price>9.95 小木虫学术博客Na qX:Oj</price>时,访问Element对象中的nodeValue属性是错误的,这时返回结果是null,而不是预期的9.95。含有文本内容的元素都包含一个Text类型的子节点,所以只有通过Text对象中的nodeValue属性才能真正访问到文本内容。  小木虫学术博客["~^j]n%b添加元素的步骤如下: 小木虫学术博客5Asj8`id?2A● 创建一个Text节点并赋值; ● 创建Element节点; 小木虫学术博客&K TVcyK● 把Text节点挂在Element节点下,作为它的子节点; 小木虫学术博客)FZ0kIL}d● 把Element节点插入到XML文档的合适位置上。  g!z9s m,dqy0对于元素节点的删除和替换操作,首先都要对操作对象进行定位,然后相应地执行对象节点所属父节点的removeChild方法和replaceChild方法即可。 小木虫学术博客-}vys;ZAttr节点的各种操作在原理上与Element节点相同。Attr对象同样继承了Node对象中的各种方法和属性,并且MSXML中还提供了name属性和value属性,能够更直接地访问到属性信息。另外,还可以通过属性所属元素的相关方法访问属性,如通过getAttribute和 setAttribute方法读取属性值或修改属性值,或者用getAttributeNode方法直接返回Attr对象。 小木虫学术博客sB]n Umu5|f创建新属性最直接的办法就是使用Element对象中的setAttribute方法。也可以先用Document对象中的 createAttribute方法设置属性值,然后使用Element对象中的setAttributeNode方法把新节点添加到DOM树中。同样地,删除属性最直接的方法是调用Element中的removeAttribute方法。另外一种方案是先用getAttributeNode方法对操作对象进行定位,然后执行removeAttributeNode操作。 T,au l9[ j0从以上的介绍中可以看出,由于节点间的继承关系,以及各种类型节点本身提供的丰富的接口,用户可以很容易地找到一套适合自己需要的对象操作方案。 !Z z+kt/&c"l0dS/ p-D0  %u/j /|t'W03、DOM的显示功能 小木虫学术博客'Y(D+P Q!K~@DOM技术还可以用来显示XML数据。XSL样式单面向的是XML文档的转换,用于显示格式的转换是其应用的一个方面,所以在显示功能上还存在着一些不足: 小木虫学术博客(NSiO2I● 不易完成对XML数据的复杂处理,如将英文字母全部转换为大写,截取指定长度的字符串,忽略一些特定的标点等; 小木虫学术博客MTt*[? hF Em● 不易对XML数据中的数值进行计算; 小木虫学术博客&GZa)a"p|([● 一个XSL通常是静态地作用到一个XML文档上,无法将多个XML文档中的数据用一个XSL合并转换为一个输出结果。 V+/(nF,g L1N0使用DOM就能够很好地解决上述问题
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值