使用javascript访问XML数据的实例


Posted in Javascript onDecember 27, 2006

在网络浏览器软件中,可以Internet Explorer (IE)现在是一种标准的软件。可以看到,运行不同版本的Windows操作系统(和很多其他的操作系统)的每一台机器几乎都使用IE。微软已经通过ActiveX控件将IE的功能包含在执行成熟的XML处理技术中。

在本篇文章中,我们将讲述如何在IE中使用ActiveX功能来访问并解析XML文档,由此允许网络冲浪者操纵它们。

网上冲浪
我们以一个标准的顺序文档而开始,如表A所示。这一文档包含简单的顺序数据以提供网络冲浪者浏览之用。不仅仅为了显示这些数据,我们还提供了一个简单的用户界面,网上冲浪都可以使用这一界面来浏览XML文档。

表A: order.xml
<?xml version="1.0" ?>
<Order>
<Account>9900234</Account>
<Item id="1">
  <SKU>1234</SKU>
  <PricePer>5.95</PricePer>
  <Quantity>100</Quantity>
  <Subtotal>595.00</Subtotal>
  <Description>Super Widget Clamp</Description>
</Item>
<Item id="2">
  <SKU>6234</SKU>
  <PricePer>22.00</PricePer>
  <Quantity>10</Quantity>
  <Subtotal>220.00</Subtotal>
  <Description>Mighty Foobar Flange</Description>
</Item>
<Item id="3">
  <SKU>9982</SKU>
  <PricePer>2.50</PricePer>
  <Quantity>1000</Quantity>
  <Subtotal>2500.00</Subtotal>
  <Description>Deluxe Doohickie</Description>
</Item>
<Item id="4">
  <SKU>3256</SKU>
  <PricePer>389.00</PricePer>
  <Quantity>1</Quantity>
  <Subtotal>389.00</Subtotal>
  <Description>Muckalucket Bucket</Description>
</Item>
<NumberItems>1111</NumberItems>
<Total>3704.00</Total>
<OrderDate>07/07/2002</OrderDate>
<OrderNumber>8876</OrderNumber>
</Order>

我们使用一个网络表单以访问这一XML文档,这一表单将显示SKU,价格,数量,各部分的小计,以及顺序中的每一选项的描述。我们的表单还包含向前和向后浏览选项的按钮。

网页的构成
网页的重要部分是在于表单,我们将使用一个表以易读的方式在屏幕上显示。下面是显示HTML表的代码片段:

<form>
<table border="0">
  <tr><td>SKU</td><td><input type="text" name="SKU"></td></tr>
  <tr><td>Price</td><td><input type="text" name="Price"></td></tr>
  <tr><td>Quantity</td><td><input type="text" name="Quantity"></td></tr>
  <tr><td>Total</td><td><input type="text" name="Total"></td></tr>
  <tr><td>Description</td><td><input type="text"
name="Description"></td></tr>
</table>
<input type="button" value=" << " onClick="getDataPrev();"> <input
type="button" value=" >> " onClick="getDataNext();">
</form> 

请注意到,我们在表的下面包含了两个按钮,即通过getDataNext() 和getDataPrev()函数来浏览前一个和后一个的记录,这也是我们所要讨论的问题。

脚本
其实,我们网页的实质部分不是在于表单,而是在于控制表单的脚本。在我们的脚本中包括四个部分。首先,我们通过载入XML文档而初始化网页。第二部分是导航到下一个记录。第三步是导航到前一个记录。第四部分是从XML文档中提取单一的值。表B显示了我们的网页的全部内容。

表B: jsxml.html
<html>
<head>
  <script language="JavaScript">
<!--
  vari = -1;
  varorderDoc = new ActiveXObject("MSXML2.DOMDocument.3.0");
  orderDoc.load("order.xml");
  var items = orderDoc.selectNodes("/Order/Item");

  
  function getNode(doc, xpath) {

 varretval = "";

 var value = doc.selectSingleNode(xpath);

 if (value) retval = value.text;

 return retval;
  }
  
  function getDataNext() {

 i++;

 if (i > items.length - 1) i = 0;

 document.forms[0].SKU.value = getNode(orderDoc, "/Order/Item[" +
i + "]/SKU");

 document.forms[0].Price.value = getNode(orderDoc, "/Order/Item["
+ i + "]/PricePer");

 document.forms[0].Quantity.value = getNode(orderDoc,
"/Order/Item[" + i + "]/Quantity");

 document.forms[0].Total.value = getNode(orderDoc, "/Order/Item["
+ i + "]/Subtotal");

 document.forms[0].Description.value = getNode(orderDoc,
"/Order/Item[" + i + "]/Description");
  }
  
  function getDataPrev() {

 i--;

 if (i < 0) i = items.length - 1;

 

 document.forms[0].SKU.value = getNode(orderDoc, "/Order/Item[" +
i + "]/SKU");

 document.forms[0].Price.value = getNode(orderDoc, "/Order/Item["
+ i + "]/PricePer");

 document.forms[0].Quantity.value = getNode(orderDoc,
"/Order/Item[" + i + "]/Quantity");

 document.forms[0].Total.value = getNode(orderDoc, "/Order/Item["
+ i + "]/Subtotal");

 document.forms[0].Description.value = getNode(orderDoc,
"/Order/Item[" + i + "]/Description");
  }
  
// -->
  </script>
</head>
<body onload="getDataNext()">
<h2>XML order Database</h2>
<form>
<table border="0">
  <tr><td>SKU</td><td><input type="text" name="SKU"></td></tr>
  <tr><td>Price</td><td><input type="text" name="Price"></td></tr>
  <tr><td>Quantity</td><td><input type="text"
name="Quantity"></td></tr>
  <tr><td>Total</td><td><input type="text" name="Total"></td></tr>
  <tr><td>Description</td><td><input type="text"
name="Description"></td></tr>
</table>
<input type="button" value=" << " onClick="getDataPrev();"> <input
type="button" value=" >> " onClick="getDataNext();">
</form> 
</body>
</html>

运行
这一网页将传入并运行脚本的初始化。你一定确保order.xml文档与jsxml.html在相同的相同的路径上。

初始化部分将一个新的ActiveX对象例示为MSXML2.DOMDocument.3.0对象类型,然后脚本传入order.xml文档到内存中,并选择所有的/Order/Item节点。我们使用/Order/Item节点以识别文档已经包含的选项。

文档中的<body>标准有一个onLoad属性,这一属性能够使得网页调用getDataNext()而初始化。这一功能可用于从XML文档中获得下一个值并显示在表单中。我们使用一个简单的索引来访问特定的选项。

向前(>>)和向后(<<)按钮都使用相同的机制。首先响应onClick事件而调用getDataNext() 或者getDataPrev(),这两个函数使用了逻辑方法以避免文档以外的范围访问我们的记录。

Javascript 相关文章推荐
xss文件页面内容读取(解决)
Nov 28 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
Mar 08 Javascript
jQuery实现文档树效果
Feb 20 Javascript
React中ES5与ES6写法的区别总结
Apr 21 Javascript
vue微信分享 vue实现当前页面分享其他页面
Dec 02 Javascript
React Native悬浮按钮组件的示例代码
Apr 05 Javascript
在angular 6中使用 less 的实例代码
May 13 Javascript
js中Object.defineProperty()方法的不详解
Jul 09 Javascript
微信小程序实现手指触摸画板
Jul 09 Javascript
iconfont的三种使用方式详解
Aug 05 Javascript
一文搞懂ES6中的Map和Set
May 20 Javascript
javascript实现画板功能
Apr 12 Javascript
URL编码转换,escape() encodeURI() encodeURIComponent()
Dec 27 #Javascript
escape、encodeURI、encodeURIComponent等方法的区别比较
Dec 27 #Javascript
破除网页鼠标右键被禁用的绝招大全
Dec 27 #Javascript
Windows Live的@live.com域名注册漏洞 利用代码
Dec 27 #Javascript
用javascript实现无刷新更新数据的详细步骤 asp
Dec 26 #Javascript
提高 DHTML 页面性能
Dec 25 #Javascript
js中几种去掉字串左右空格的方法
Dec 25 #Javascript
You might like
PHP VS ASP
2006/10/09 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Python程序中设置HTTP代理
2016/11/06 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
python图像和办公文档处理总结
2019/05/28 Python
详细分析Python collections工具库
2020/07/16 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
比利时家具购买网站:Home24
2019/01/03 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
咖啡店自主创业商业计划书
2014/01/22 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
护理专科自荐书范文
2014/02/18 职场文书
2014两会学习心得:时代的发展
2014/03/17 职场文书
毕业生求职信
2014/06/10 职场文书
加薪申请报告范本
2015/05/15 职场文书
离婚协议书格式范本
2016/03/18 职场文书
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
nginx+lua单机上万并发的实现
2021/05/31 Servers
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技