ホームページ >バックエンド開発 >XML/RSS チュートリアル >JavaScript を使用して XML データにアクセスする
Webブラウザソフトの中で、Internet Explorer(IE)は今や定番のソフトです。ご覧のとおり、さまざまなバージョンの Windows オペレーティング システム (および他の多くのオペレーティング システム) を実行しているほぼすべてのマシンが IE を使用しています。 Microsoft は、ActiveX コントロールを介した成熟した XML 処理テクノロジの実装に IE の機能を組み込みました。
この記事では、IE の ActiveX 機能を使用して XML ドキュメントにアクセスして解析し、Web サーファーが XML ドキュメントを操作できるようにする方法について説明します。
ウェブサーフィン
表 A に示すように、標準的な順次ドキュメントから始めます。このドキュメントには、Web サーファーが閲覧するための単純な連続データが含まれています。このデータを表示するだけでなく、インターネットをサーフィンする誰もが 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>
Web フォームを使用してこの XML ドキュメントにアクセスすると、SKU、価格、数量、各部品の小計、および注文の各オプションの説明が表示されます。私たちのフォームには、前方および後方の閲覧オプション用のボタンも含まれています。
Webページの構成
Webページの重要な部分は表を使って画面上に見やすく表示します。以下は、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>
テーブルの下に 2 つのボタンが含まれていることにご注意ください。これらのボタンは、getDataNext() 関数と getDataPrev() 関数を通じて前後のレコードを参照します。私たちは議論すべき問題を抱えています。
スクリプト
実際、Web ページの重要な部分はフォームではなく、フォームを制御するスクリプトです。スクリプトには 4 つの部分が含まれています。まず、XML ドキュメントをロードして Web ページを初期化します。 2 番目の部分は、次のレコードに移動することです。 3 番目のステップは、前のレコードに移動することです。 4 番目の部分は、XML ドキュメントから単一の値を抽出することです。表 B は、Web ページのコンテンツ全体を示しています。
テーブル 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>
Run
この Web ページが渡され、スクリプトの初期化が実行されます。 order.xml ドキュメントが jsxml.html と同じパスにあることを確認する必要があります。
初期化部分は、新しい ActiveX オブジェクトを MSXML2.DOMDocument.3.0 オブジェクト タイプとしてインスタンス化し、スクリプトは order.xml ドキュメントをメモリに渡し、すべての /Order/Item ノードを選択します。 /Order/Item ノードを使用して、ドキュメントに既に含まれているオプションを識別します。
ドキュメント内の 6c04bd5ca3fcae76e30b72ad730ca86d 標準には onLoad 属性があり、getDataNext() を呼び出して Web ページを初期化できるようになります。この機能を使用すると、XML ドキュメントから次の値を取得し、それをフォームに表示できます。特定のオプションにアクセスするには、単純なインデックスを使用します。
進む (>>) ボタンと戻る (<<) ボタンは両方とも同じメカニズムを使用します。まず、onClick イベントに応答して getDataNext() または getDataPrev() を呼び出します。これら 2 つの関数は論理メソッドを使用して、ドキュメントの範囲外のレコードへのアクセスを回避します。
上記は、JavaScript を使用して XML データにアクセスする内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。