この記事では、XML 文書データをオンラインで編集する方法を、詳細な例を通じて説明します。 Netscape の XML サポートは比較的弱いため、クロスプラットフォームのデータ交換を実現するには、データ処理をサーバー側で実行する必要があります。 XML ドキュメントを編集するには、まずデータを抽出して訪問者に表示する方法が必要です。XSL は、XML ファイルを表示するための優れたソリューションを提供します。次の例では、XSL スタイルシートを使用して、ユーザーが編集できる XML ドキュメントを表示し、編集したデータをサーバーに送信し、サーバー側でデータが更新されます。ここでは、ASP (Active Server Pages) を使用してタスクを完了します。
まず、編集する XML ドキュメントをロードします。Microsoft のドキュメント オブジェクト モデル (Microsoft XMLDOM オブジェクト) と XSL を使用すると、XML ドキュメントをサーバー側でクライアント側で表示できる HTML ファイル コンテンツに変換できます。まず、使用する XML ファイルと XSL ファイルがどのようなものかを見てみましょう。
XML ファイル: UserData.xml
<?xml version="1.0"coding="gb2312"?>
<!-- XMLSPY v2004 rel. 4 U ( http://www.xmlspy.com ) by Dicky (Apple'S Eden) で編集 -->
<ユーザー情報>
<フィールドID="名前" TabOrder="1">
<FieldValue>ディッキー</FieldValue>
</フィールド>
<フィールドID="性別" TabOrder="2">
<FieldValue>男性</FieldValue>
</フィールド>
<フィールドID="ユニット名" TabOrder="3">
<FieldValue>上海エイチーム会社</FieldValue>
</フィールド>
<フィールドID="住所" TabOrder="4">
<FieldValue>上海、中山西路 1800#、26A 号室</FieldValue>
</フィールド>
<フィールドID="電話番号" TabOrder="5">
<フィールド値>13800138000</フィールド値>
</フィールド>
<フィールド ID="電子メール" TabOrder="6">
<FieldValue>[email protected]</FieldValue>
</フィールド>
</UserInfo>
XSL ファイル: UserData.xsl
<?xml version="1.0" encoding="gb2312"?>
<!-- XMLSPY v2004 rel. 4 U ( http://www.xmlspy.com ) by Dicky (Apple'S Eden) で編集 -->
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
<本文>
<form method="post" action="EditUserData.asp">
<h1>ユーザー情報の編集:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="ユーザー情報/フィールド">
<tr>
<td>
<xsl:value-of select="@ID"/>
</td>
<td>
<input type="text">
<xsl:attribute name="ID"><xsl:value-of select="@ID"/></xsl:attribute>
<xsl:attribute name="Name"><xsl:value-of select="@ID"/></xsl:attribute>
<xsl:attribute name="Value"><xsl:value-of select="FieldValue"/></xsl:attribute>
</入力>
</td>
</tr>
</xsl:for-each>
</テーブル>
<br/>
<input type="submit" id="btnSubmit" name="btnSubmit" value="編集"/>
</form>
</body>
</html>
</xsl:テンプレート>
</xsl:stylesheet>
XSL ファイルは、XSL: for-each 要素を使用して、XML ファイル全体の各「field」要素の「id」属性と、 HTMLフォーム名のテキスト入力ボックス」に相当します。このように、HTML フォームのテキスト入力ボックスには、XML ファイルの要素値が表示されます。このファイルは、さまざまなブラウザで表示できるように XML ドキュメントをサーバー側で変換する役割を果たします。
以下は、XML ドキュメントを開いて更新する機能を実装し、フォームが送信されたかどうかに基づいて更新するかどうかを決定する主要なプログラムです。これには 2 つの関数が含まれており、loadXMLFile は表示する XML ファイルのロードと変換を担当し、updateXML 関数は XML ファイルの更新を担当します。
EditUserData.asp プログラムは次のとおりです:
<%
'------------------------------------------------ - ---------
' 2 つのパラメータを受け取る関数 LoadXMLFile() を定義します。
'strXMLFile - XML ファイルのパスとファイル名 'strXSLFilee - XSL ファイルのパスとファイル名'---------------------- ------- ----------------------------------
関数LoadXMLFile(strXMLFile, strXSLFile)
'ローカル変数を宣言する
薄暗いobjXML
薄暗いobjXSL
'XMLDOM オブジェクトをインスタンス化して XML ファイルをロードします。
set objXML = Server.CreateObject("Microsoft.XMLDOM")
'ファイルの非同期読み込みモードをオフにします。
objXML.Async = False
'XML ファイルをロードしてください!
objXML.Load(strXMLFile)
'XMLDOM オブジェクトをインスタンス化して XSL ファイルをロードします。
set objXSL = Server.CreateObject("Microsoft.XMLDOM")
'ファイルの非同期読み込みモードをオフにします。
objXSL.Async = False
'XSL ファイルをロードしてください!
objXSL.Load(strXSLファイル)
'XMLDOM のtransformNode メソッドを使用して、XSL スタイル シートを XML ドキュメントに適用し、クライアントに出力します。
Response.Write(objXML.TransFormNode(objXSL))
終了機能
'------------------------------------------------ - -----------------
関数 updateXML() は 1 つのパラメータを受け取ります: strXMLFile - XML ファイルのパスとファイル名。
'------------------------------------------------ - -----------------
関数 UpdateXML(strXMLFile)
'ローカル変数を宣言します。
薄暗いオブジェクトDom
Dim objRoot
薄暗いオブジェクトフィールド
ディム×
'XMLDOM オブジェクトをインスタンス化します。
objDOM = Server.CreateObject("Microsoft.XMLDOM") を設定します
'ファイルの非同期読み込みモードをオフにします。
objDom.Async = False
'XML ファイルを読み込みます。
objDom.Load strXMLFile
'ルート要素を設定します。
objRoot = objDom.DocumentElement を設定します
'FORM コレクションを走査し、送信されたデータを XML ファイルに書き込みます。
x = 1 の場合、Request.Form.Count へ
'入稿データにボタンが含まれているか確認します。その場合は、このデータを無視してください。
Instr(1,Request.Form.Key(x),"btn") = 0 の場合
' XSL クエリ モードに従って、objField 変数を確立し、フォームの要素を XML ドキュメント内の対応する要素 [field_value] にマップします。
Set objField = objRoot.SelectSingleNode("Field[@ID='" & Request.Form.Key(x) & "']/FieldValue")
'フォームによって送信されたデータを XML ドキュメント内のノード値と関連付けます。
objField.Text = リクエスト.フォーム(x)
終了の場合
次
'編集したXMLファイルを保存します。
objDom.Save strXMLFile
'オブジェクトへのすべての参照を解放します。
objDom = なしを設定します
objRoot = なしを設定します
objField = なしを設定します
'LoadXMLFile 関数を呼び出して、UpdatedUserData.xsl スタイル シートを使用して、新しく編集された XML ファイルをクライアントに表示します。
LoadXMLFile strXMLFile,Server.MapPath("UpdatedUserData.xsl")
End Function
' フォームが正常に送信されたかどうかを確認し、送信された場合は XML ファイルを更新し、そうでない場合は編集状態に進みます。
Request.Form("btnSubmit") = "" の場合
LoadXMLFile Server.MapPath("UserData.xml"),Server.MapPath("UserData.xsl")
それ以外
UpdateXML Server.MapPath("UserData.xml")
終了の場合
%>
フォームが正常に送信されると、UpdatedUserData.xsl を使用して、編集したばかりのデータが表示されます。
UpdatedUserData.xsl は次のとおりです:
<?xml version="1.0"coding="gb2312"?>
<!-- XMLSPY v2004 rel. 4 U ( http://www.xmlspy.com ) by Dicky (Apple'S Eden) で編集 -->
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/TR/WD-xsl ">
<xsl:template match="/">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
<本文>
<h1>更新されたユーザー情報:</h1>
<table border="1" cellpadding="2">
<xsl:for-each select="ユーザー情報/フィールド">
<tr>
<td>
<xsl:value-of select="@ID"/>
</td>
<td>
<xsl:value-of select="FieldValue"/>
</td>
</tr>
</xsl:for-each>
</テーブル>
<フォーム>
<input type="button" value="戻る" onclick="history.go(-1)"/>
</form>
</body>
</html>
</xsl:テンプレート>
</xsl:stylesheet>
上記は、XML クロスプラットフォーム アプリケーションの単純な例にすぎません。特定のニーズに基づいて、より複雑な作業を完了するためのより強力なプログラムを作成できます。すべてのプログラムは、Windows 2003 En+IIS 6.0+IE6.0+MSXML3.Dll 環境でのデバッグに合格しました。