以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XML基础 』 (http://bbs.xml.org.cn/list.asp?boardid=1) ---- [转帖]Web设计中如何使用XML数据源对象 (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=5298) |
-- 作者:admin -- 发布时间:1/27/2004 12:46:00 PM -- [转帖]Web设计中如何使用XML数据源对象 http://www.yesky.com/SoftChannel/72342376223342592/20030603/1704962.shtml Web设计中如何使用XML数据源对象 XML数据源对象是一个ActiveX控件,允许你在XML文件和HTML页面之间操作数据。本文将向你展示如何从各种XML数据源中提取数据,以及如何使用JavaScript显示这些数据。 XML数据源对象DSO是一个微软ActiveX控件,构建在微软IE4以后的版本上。这个对象允许你把一个外部的XML文件或者嵌入HTML文件中的内容提取到HTML页面中。 你可以在一个Web页面中使用XML - DSO从一个外部XML文件中选取内容,从嵌入Web页面的XML中提取XML数据,然后使用JavaScript操作这些数据。然而,并不建议在Internet中使用这个对象,因为DSO只能工作在MSIE 4以上的浏览器中,因此这可能会带来一些兼容性问题。 所以,在企业内部网使用XML-DSO是很合适的。 开始 为了初始化XML - DSO对象,我们使用<OBJECT>标记。 用于XML-DSO的CLASSID是: CLSID:550dda30-0541-11d2-9ca9-0060b0ec3d39 这ID唯一标识XML-DSO。使用下面的代码在一个Web页面中初始化这个控件: <OBJECT ID="SomeID" CLASSID="CLSID:550dda30-0541-11d2-9ca9-0060b0ec3d39"></OBJECT> 虽然大部分对象需要许多参数与之相关联,但是XML-DSO不需要任何参数。 使用一个XML数据岛析取数据 首先,通过使用<XML>标记包含一个XML数据岛。其次,给它分配一个ID,xmldb --以备以后使用。 数据实际上是使用HTML标记:<ALT>,<SPAN>,<DIV>等等提取的。代码列表1中的代码使用了<SPAN>标记。datasrc属性指定了你想从中提取数据的那个数据岛。datafld属性指定了你想要的数据的XML标记。所以,第一个<SPAN>提取名称,而第二<SPAN>提取性别。 代码列表1: <!-- example1.htm --> <span datasrc="#xmldb" datafld="name"<</span> </body> 注意这段代码没有初始化一个XML-DSO对象。这是因为XML数据岛的使用中已经隐式地创建了一个。输出应为: 注意在XML数据岛中有两个<name>和<sex>标记。使用这个方法,你只能提取这些标记中的第一个实例。代码列表2中的代码使用<TABLE>标记提取所有的实例: 输出将是: 在代码列表2中,<TABLE>标记使用<TD>标记内的<DIV>标记提取数据。表格将自动重复<member>(<name>和<sex>的母标记)的每个实例。 代码列表2: <xml id="xmldb"> <table datasrc="#xmldb" border="1"> 使用外部XML文件提取数据 为了使用XML-DSO加载一个外部XML文件,你必须显式的包含这个对象并且使用一些JavaScript。 首先创建一个XML-DSO对象,使用ID myXML。添加宽度和高度属性到<OBJECT>标记中,然后设置它们的值为0。这保证XML-DSO对象不会占据你的Web页面的任何空间。 其次,使用datasrc创建一个象myXML一样的表--类似于代码列表2中一样。代码使用<DIV>标记(在TD标记之)提取数据,使用datafld作为第一栏的信息,并且使用URL作为第二栏。添加<SCRIPT>标记,因为在这里,外部的XML使用Java脚本显式地声明你想要加载的XML文件。 设置变量xmlDso为myXML.XMLDocument。myXML引用你已经创建的对象。接下来,使用XML-DSO的load()方法加载example3.xml。文件example3.xml连接到对象myXML上。 现在,研究一下下面的HTML页面: <object id="myXML" CLASSID="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39" <table datasrc="#myXML" border="1"> </body> 输出应是: Message URL 上面的脚本非常特殊化。下面给出一个更一般的脚本: 使用XML-DSO和JavaScript 假设你有一个包含姓名、电子邮件地址和电话号码的XML文件。你想使用它构建一个应用程序,显示每个人的档案--一次显示一个。用户将使用"Next"和"Previous"按钮浏览每个人的数据。Javascript可以帮助你实现这个目的。 下面的代码使用记录集方法把文件中所有的数据保存到一个变量memberSet中。moveNext()方法指向下一个数据项(下一行)。脚本然后载入XML文件example4.xml,把记录保存到变量memberSet中。第一个记录将被显示,但是memberSet.moveNext()指向文件中相对于前一个指定数据的下一个记录。 这里是相应的HTML文件: /* Get the complete record set */ /* Go to next data */ <object id="myDB" CLASSID="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39" <span datasrc="#myDB" datafld="name"></span> </body> 输出应是: Vinod 下面给出更多使用JavaScript操作XML-DSO的方法: · movePrevious(): 指向前一个数据项。 · moveFirst(): 指向第一个数据项。 · moveLast(): 指向最后一个数据项。 · EOF: 这个属性用来检测我们是否已经到达数据记录的底部。 假设你有一个包含姓名、电子邮件地址和电话号码的XML文件。你想使用它构建一个应用程序,显示每个人的档案--一次显示一个。用户将使用"Next"和"Previous"按钮浏览每个人的数据。Javascript可以帮助你实现这个目的。 下面的代码使用记录集方法把文件中所有的数据保存到一个变量memberSet中。moveNext()方法指向下一个数据项(下一行)。脚本然后载入XML文件example4.xml,把记录保存到变量memberSet中。第一个记录将被显示,但是memberSet.moveNext()指向文件中相对于前一个指定数据的下一个记录。 这里是相应的HTML文件: /* Get the complete record set */ /* Go to next data */ <object id="myDB" CLASSID="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39" <span datasrc="#myDB" datafld="name"></span> </body> 输出应是: Vinod 下面给出更多使用JavaScript操作XML-DSO的方法: · movePrevious(): 指向前一个数据项。 · moveFirst(): 指向第一个数据项。 · moveLast(): 指向最后一个数据项。 · EOF: 这个属性用来检测我们是否已经到达数据记录的底部。 initTicker()首先检查是否有IE 4+。如果浏览器是IE4+,这个XML文件被作为一个参数被传递并载入。如果定时器失败了,那么调用xmlDsoTicker()函数。xmlDsoTicker()除了xmlFile参数以外,和initTicker()有相同的参数,因为XML文件已经被载入。xmlDsoTicker()检查变量counter(初始值为maxMsgs)是否小于maxMsgs-1。如果是,moveNext()方法指向tickerSet中下一个数据项。 HTML页面的BODY包含下面的代码: 在这段代码中,<A>标记把XML文件的URL作为它的datafld。<SPAN>标记把XML文件的信息作为它的datafld。这个信息在<SPAN>元素中显示,然后整个信息可以通过这段信息相应的URL连接。 这样,<A>和<SPAN>元素包含下一个数据项(URL和信息)。在一段延迟以后,<A>和<SPAN>指向下一个数据。只要counter<maxMsgs-1(计数器每次递增),这个操作就会发生。如果counter<maxMsgs-1是假,计数器就被设置为0,然后指向tickerSet中的第一个数据项。 |
-- 作者:johnwang -- 发布时间:10/13/2005 4:57:00 PM -- 怎么第一个就有问题啊 刚刚开始学. <html> <head> <title>XML DSO-example2.htm</title> </head> <body bgcolor="#FFFFFF"> <xml id="xmldb"> <table datasrc="#xmldb" border="1"> </body> |
-- 作者:robin21_cn -- 发布时间:10/20/2005 3:16:00 PM -- 有问题吗? |
-- 作者:比尔熊 -- 发布时间:10/21/2005 8:21:00 AM -- 不错, 顶 |
-- 作者:studyism -- 发布时间:10/23/2005 6:50:00 PM -- 真的很不错,受教育啊 |
-- 作者:benny987 -- 发布时间:11/10/2005 11:47:00 AM -- very good ,thanks for your share |
-- 作者:bigfly -- 发布时间:12/14/2005 12:07:00 PM -- 3Q v m~~~~~ |
-- 作者:simeon -- 发布时间:12/16/2005 4:12:00 PM -- 好文章常阅读,嘿嘿。。 |
-- 作者:xueran -- 发布时间:12/22/2005 10:22:00 PM -- 第一个有问题,读不出记录。把XML段中,删除一个记录就能读出来。 但是外部调用的时候,没有问题。。。 |
-- 作者:aassddff -- 发布时间:2/20/2006 10:50:00 PM -- example1.htm 中的第一个记录,<name>Premshree Pillai<name> 错了 应该是<name>Premshree Pillai</name> |
-- 作者:syw120 -- 发布时间:5/18/2006 1:29:00 PM -- 楼上的说的正确,掉/了,下面的几个例子也一样!~! |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
85.938ms |