本文通過一個詳細的例子
來闡述了在線編輯XML文檔數據的方法
由於Netscape對XML的支持比較弱
因此
要實現跨平台的數據交換
數據的處理必須在服務器端進行
要編輯XML文檔
首先要做的事情就是怎樣把這些數據提取並顯示給訪問者
XSL為我們顯示XML文件提供了一個很好的解決方案
下面的例子就是利用XSL樣式單把XML文檔顯示出來
供用戶進行編輯
然後再把編輯後的數據提交到服務器
在服務器端進行數據的更新
這裡采用ASP(Active Server Pages)來完成我們的任務
首先
載入我們要進行編輯的XML文檔
利用微軟的文檔對象模型(Microsoft XMLDOM Object)和XSL
XML文檔就可以在服務器端轉換成可以在客戶端顯示的HTML文件內容
下面先看看我們使用的XML和XSL文件是什麼樣子的
XML文件
UserData
xml
<?xml version=
encoding=
gb
?>
<!
edited with XMLSPY v
rel
U () by Dicky (Apple
S Eden)
>
<UserInfo>
<Field ID=
Name
TabOrder=
>
<FieldValue>Dicky</FieldValue>
</Field>
<Field ID=
Sex
TabOrder=
>
<FieldValue>Male</FieldValue>
</Field>
<Field ID=
UnitName
TabOrder=
>
<FieldValue>ShangHai Ateam Company</FieldValue>
</Field>
<Field ID=
Address
TabOrder=
>
<FieldValue>ShangHai
ZhongShan West Road
#
Room
A</FieldValue>
</Field>
<Field ID=
Tel
TabOrder=
>
<FieldValue>
</FieldValue>
</Field>
<Field ID=
EMail
TabOrder=
>
<FieldValue>AppleBBS@GMail
Com</FieldValue>
</Field>
</UserInfo>
XSL文件
UserData
xsl
<?xml version=
encoding=
gb
?>
<!
edited with XMLSPY v
rel
U () by Dicky (Apple
S Eden)
>
<xsl:stylesheet xmlns:xsl=
xsl
>
<xsl:template match=
/
>
<html>
<meta http
equiv=
Content
Type
content=
text/html; charset=gb
/>
<body>
<form method=
post
action=
EditUserData
asp
>
<h
>Edit UserInfo
</h
>
<table border=
cellpadding=
>
<xsl:for
each select=
UserInfo/Field
>
<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>
</input>
</td>
</tr>
</xsl:for
each>
</table>
<br/>
<input type=
submit
id=
btnSubmit
name=
btnSubmit
value=
Edit
/>
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSL文件使用了XSL
for
each元素的來遍歷整個XML文件
XML文件裡每個
field
元素的
id
屬性和HTML表單的文本輸入框的
id
和
name
相對應
這樣
HTML表單的文本輸入框就顯示出了XML文件的元素值
此文件負責XML文檔在服務器端的轉換
以便能在各種浏覽器上顯示
下面是關鍵的程序
它實現打開和更新XML文檔的功能
並根據表單的提交與否
來決定是否進行更新
它包含了兩個函數
loadXMLFile負責載入和轉換要顯示的XML文件
updateXML函數負責更新XML文件
EditUserData
asp程序如下:
<%
定義函數 LoadXMLFile()
接收二個參數
strXMLFile
XML 文件的路徑和文件名字
strXSLFilee
XSL 文件的路徑和文件名字
Function LoadXMLFile(strXMLFile
strXSLFile)
Declare local variables
Dim objXML
Dim 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(strXSLFile)
利用 XMLDOM 的 transformNode 方法
把 XSL 樣式表應用到 XML 文檔
然後輸出到客戶端
Response
Write(objXML
TransFormNode(objXSL))
End Function
函數 updateXML() 接收一個參數
strXMLFile
XML 文件的路徑和文件名
Function UpdateXML(strXMLFile)
聲明局部變量
Dim objDom
Dim objRoot
Dim objField
Dim x
實例化 XMLDOM 對象
Set objDOM = Server
CreateObject(
Microsoft
XMLDOM
)
關掉文件異步載入模式
objDom
Async = False
載入 XML 文件
objDom
Load strXMLFile
設定根元素
Set objRoot = objDom
DocumentElement
遍歷 FORM 集合
並把提交的數據寫入 XML 文件
For x =
To Request
Form
Count
檢查提交的數據是否包含按鈕
如果是
忽略此數據
If Instr(
Request
Form
Key(x)
btn
) =
Then
按照 XSL 查詢模式
建立 objField 變量
把表單的元素對應到 XML 文檔裡的相應元素[field_value]
Set objField = objRoot
SelectSingleNode(
Field[@ID=
& Request
Form
Key(x) &
]/FieldValue
)
把表單提交的數據和 XML 文檔裡的節點值對應起來
objField
Text = Request
Form(x)
End If
Next
保存編輯過的 XML 文件
objDom
Save strXMLFile
釋放所有對對象的引用
Set objDom = Nothing
Set objRoot = Nothing
Set objField = Nothing
調用 LoadXMLFile 函數
把新編輯後的 XML 文件用 UpdatedUserData
xsl 樣式單顯示到客戶端
LoadXMLFile strXMLFile
Server
MapPath(
UpdatedUserData
xsl
)
End Function
檢查表單是否成功提交
如提交
更新 XML 文件
否則
轉到編輯狀態
If Request
Form(
btnSubmit
) =
Then
LoadXMLFile Server
MapPath(
UserData
xml
)
Server
MapPath(
UserData
xsl
)
Else
UpdateXML Server
MapPath(
UserData
xml
)
End If
%>
當表單提交成功後
我們用UpdatedUserData
xsl來顯示我們剛剛編輯的數據
UpdatedUserData
xsl如下:
<?xml version=
encoding=
gb
?>
<!
edited with XMLSPY v
rel
U () by Dicky (Apple
S Eden)
>
<xsl:stylesheet xmlns:xsl=
xsl
>
<xsl:template match=
/
>
<html>
<meta http
equiv=
Content
Type
content=
text/html; charset=gb
/>
<body>
<h
>Updated UserInfo
</h
>
<table border=
cellpadding=
>
<xsl:for
each select=
UserInfo/Field
>
<tr>
<td>
<xsl:value
of select=
@ID
/>
</td>
<td>
<xsl:value
of select=
FieldValue
/>
</td>
</tr>
</xsl:for
each>
</table>
<form>
<input type=
button
value=
Go Back
onclick=
history
go(
)
/>
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
以上只是XML跨平台應用的一個簡單的例子
結合具體的需求
我們可以編寫功能更強大的程序來完成我們更負雜的工作
所有程序在Windows
En+IIS
+IE
+MSXML
Dll環境下調試通過
From:http://tw.wingwit.com/Article/program/net/201311/13728.html