利用ActiveX控件在IE中解析XML数据

作者:纸飞机时间:2026-10-28 15:13:21浏览:138

本文介绍如何在Internet Explorer中利用ActiveX控件MSXML2.DOMDocument.3.0加载并解析XML文档。通过JavaScript脚本实现XML节点的选择与遍历,结合HTML表单展示数据,并提供向前和向后浏览记录的功能,帮助用户在网页中直观操作XML数据。

IE中通过ActiveX访问XML数据

在当前的网络浏览器生态中,Internet Explorer (IE) 曾是Windows操作系统下的标准软件,广泛存在于各类机器中。微软通过ActiveX控件技术,将IE的功能与成熟的XML处理技术相结合,为XML数据的处理提供了支持。



本文将详细阐述如何在IE浏览器中利用ActiveX功能来访问和解析XML文档,从而允许用户通过网页界面直接操作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>



HTML表单界面设计

我们使用一个网络表单来访问这一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()函数来浏览前一个和后一个记录,这也是本文讨论的重点。



JavaScript脚本实现逻辑

脚本部分


实际上,网页的核心不在于表单,而在于控制表单的脚本。我们的脚本包含四个部分:首先,通过加载XML文档来初始化网页;第二部分是导航到下一条记录;第三步是导航到上一条记录;第四部分是从XML文档中提取单个值。表B展示了网页的全部内容。



表B: jsxml.html


<html>


<head>


<script language="JavaScript">


<!--

var i = -1;


var orderDoc = new ActiveXObject("MSXML2.DOMDocument.3.0");


orderDoc.load("order.xml");


var items = orderDoc.selectNodes("/Order/Item");


    

function getNode(doc, xpath) {


var retval = "";


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(),这两个函数使用逻辑方法以避免访问超出文档范围的记录。


作者最新文章