返回列表 发新帖

大话html dom与xml dom的区别与联系

303.5k 10
swmozowtfl 发表于 2015-7-14 22:21:30|湖北 | 查看全部 阅读模式
本文内容的主题便是,为什么开发者要认为“dom level 1规范的架构”是至关重要的,其突出的重要性在哪里等等,以及还有html dom和xml dom之间微妙的区别及内在的联系。
! D! [+ u# r. y) D6 A& i0 R- I7 {- ?7 kw3c所制订的dom level分为两大模块:core和html。第一个大模块是core核心,w3c规范是这样描述core的:满足软件开发者和web脚本编写者,访问和操控产品项目中包含的可解析的html和xml内容。, w) |6 D$ x0 a7 G/ Z- _. E
第二个html模块,规范描述为:html之中特定元素的功能,和恰到好处的、易用的、针对常见性任务的html文档操作机制。
8 U3 y8 ~! p) K9 t& b: j7 U/ o以上可见两者的重要性。同时html模块的意义也在于,解决了向后兼容的问题,这在当今符合dom level 1的浏览器中已经可以提供适应的解决方案。  U, x6 f5 V6 D' k6 B2 B) V
按照这样的说法,如果您仍然不能理解上述的要义,我们则可以这样认为,html文档可以使用core api和html api两者;而xml文档只能使用core api。换句话说,html与xml重叠的部分有core api,而html api则是不能共享的部分,顾名思义限于html文档所使用。这是我们认识core/html的初步认识。$ R/ I4 K$ u" d* z4 L& Q
理解dom level 1 core# Z2 B* a1 ]* I, f4 t9 D! N! G
理解dom level 1 core之要义实质在于将core看待成为许多节点(nodes)而组成的文档(document),也就是说,此文档结构中可允许存在着大量的条目项,其每一项都可理解为“节点”。讨论该结构可以以两个方面入手:一、一切皆是节点对象(node object,扁平化的角度去理解,flattened view,乃适合于多态下的接口);二、每个对象继承于基类节点,实现了节点的接口(interface,oo继承的角度去理解)。请观察一下这段html:3 \$ m3 r0 t+ T* J! b, e. U
view plaincopy to clipboardprint?
8 F( w: \. q% d1 c<div id=mydiv>hello world</div>
9 g$ u, v' s3 O# t3 S<div id=mydiv>hello world</div>
1 `" r/ S: I' b1 t: p这是一个闭合的div标签。从dom level 1的层面来分析可以有以下几点内容:
0 @& `- B) S& V7 o◆标签div可作为“节点对象node object(扁平化角度,前面已述)”,或者元素对象element object(继承的角度 - 元素继承于node)。* R4 L! s0 Q  H8 U
◆节点属性id也可作为“节点对象node object(扁平化角度)”,或者属性对象attr. object(继承的角度 - attr继承于node)。
" @8 |& Z+ e. d; O3 q1 ?9 Y◆文本“hello world”也可作为“节点对象node object(扁平化角度)”,字符串对象characterdata对象(继承的角度 - characterdata继承于node),text文本对象(继承的角度 - text继承于characterdata)。
% r$ w8 I" J+ h4 `稍微归纳一下,就是dom 1 core部分中一切皆是节点,节点以及其接口都可实现在每个对象身上(从继承的角度理解出发),实现了节点接口才可以有节点的属性、方法。——这是我们理解的前提。然后,根据特定的节点类型的不同,其接口的属性和方法都是不同的,视乎dom对该节点的设计而定。
1 X! k! z/ w) z7 h理解dom level 1 html6 o' d0 T8 }6 y3 c
我们日常工作的时候,跟html文档打交道,其实就是属于w3c所规定的dom level 1 html模块内的处理工作。html dom的特性和方法不是标准的dom实现,是专门针对html同时也让一些dom操作变的更加简便。html模块集中表现在htmlelement接口上,即为全体元素类型的对象所实现的接口。就该文讨论的范围而言,htmlelement接口的参与形式与上述的 node节点接口非常地相似。一旦引入了oo设计观,只要实现了htmlelement接口的对象,就可以定义它为元素了。一份html文档有相当多的都是元素,当然还有,表示文档本身的htmldocument和集合容器htmlcollection等等。
6 F3 Z2 G4 t. q因此,要准确理解dom 1 html的模块,必须认识其接口是基于元素的(element-based),而不是基于节点的(node-based)。那样的话,元素方式与节点方式到底又有什么区别呢(element v.s node),应该如何界定两者呢?例如节点属性(properties of elements),当在“基于元素”的语境中,就是“属性(attributes)”,并非独立的节点对象。——尽管按照某个角度讲,元素是节点的一种特例,我们仍可保留“节点”这一说法,一个标签(tag)便是一个 “节点”。假如我们要得到id属性的字符串的值是什么,采用dom 1 core的方式就是:
: j' c0 Q- d1 Q0 Sview plaincopy to clipboardprint?
) s+ t# u+ Q0 W* t$ T! Imyelement.attributes[id].value; // 从node接口提供的属性
" t' z- N& J+ `. A# v$ xmyelement.attributes[id].value; // 从node接口提供的属性
3 c! M/ G) f" q等于下面的方法:
' s: J$ x, ^( K9 v( ^) K! [: E2 hview plaincopy to clipboardprint? $ [- p7 x# \, X. [1 o
myelement.getattributes(id); // 从element实现的方法返回
! T' t8 Y8 T: G5 W2 {! Y+ C7 v; Kmyelement.getattributes(id); // 从element实现的方法返回 . h& c: j+ `! {  F1 \1 y# `" v7 m. e
但使用dom 1 html方式的话,我们仅仅如此:, B% ?* O: b+ o
view plaincopy to clipboardprint? ; p$ s7 `: Y. o, E- r$ g! \* b) t
myelement.id; : }: G. R7 R  D4 `4 \* G! N6 G- q
myelement.id;
( {7 S, X, T% \5 N# R# w; r4 J; Q这般就可以获取id了。此时此刻,你可能会认为,xml文档本身就不一定缺省有id的属性,而因为有你所说的htmlelement.id属性预先定义在api中,当然html中的每个元素就有id的属性啦——这里的意思没有错,也不妨碍我们的理解。的确全体的html元素均有id一项的属性,不管htmldivelement\htmlimageelement\……" b4 M; W- O1 b
core or html module?* x9 c) v( z8 _" P: ]
既然这样,那我应该使用core的api,还是html模块的api?对于html的文档来说,用core或html moduel实际差别不大。本来我们一直都不太强调这种界定,以致忽略了它们细微的差异。如果我们觉得还是模棱两可的话,我们可进一步查探它们的明细。个人认为处理xhtml并使用core api这样更能够说明xhtml的“x”,即表明这份html就是一份标准的xml文档,以便与原有html 4.1从语义上区别开来。但请记住,当处理一份xml结构的文档的时候,自然而然就是采用core去处理。通过xhmlhttprequest请求执行后所返回的responsexml结果,只能使用core的api去处理分析,就不能够采用html的了。5 q/ V+ ]7 Z1 }* I( e: r
小结
: @3 X2 [5 s/ U* p$ J通过文本开发者应该明白到,html dom与xml dom之间,既有区别,又有联系。一般而言,除了上述比较外,须值得一提的就是,html是可以允许不well-form的,xml就不行。
, ^' v' W- Y3 V  [+ |5 b8 I
1 K0 G! c. C$ K) d6 e# R, A  ?9 k更多网页制作信息请查看: 网页制作

回复|共 10 个

alapScady 发表于 2016-2-8 16:02:29|美国 | 查看全部
也有啊,前天不是你也到一个很狂的贴里去了吗?
tohme 发表于 2016-2-8 16:02:00|加拿大 | 查看全部
呵呵 我可不敢~~~~
wwzcdenleclv 发表于 2016-2-8 16:02:34|印度 | 查看全部
笨点也好~~~~
Mqokjdvq 发表于 2016-2-8 16:02:15|INNA | 查看全部
我帮不了你
mwxny 发表于 2016-2-8 16:02:04|美国 | 查看全部
手机版的得知互动论坛好强大
Acropozelan 发表于 2016-3-23 21:29:45|美国 | 查看全部
俺灌的不是水,是寂寞啊!
buingeEvineus 发表于 2016-3-23 21:29:28|INNA | 查看全部
什么什么啊??
GoodyFouppy 发表于 2016-3-23 21:29:45|美国 | 查看全部
看起来好~~像啊~~~~~
gevaemaidovef 发表于 2016-3-23 21:30:02|中国 | 查看全部
我也不知道了~~你把我问蒙了 呵呵
wwdu926a 发表于 2016-3-23 21:29:59|美国 | 查看全部
呵呵 那是啊~~

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

得知互动是一个融创意、设计、开发、营销、生活、互联网于一体的专业交流分享平台。
Copyright © 2026 得知互动-专注Ai与站长技术交流社区-Ai交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表