我也來寫個簡單的範例吧!
test.xml
<?xml version="1.0" encoding="big5"?> <Persons> <Person name="sale"> <Name>張三</Name> <Mobile>123XXXXXXXX</Mobile> <Name>李四</Name> <Mobile>456XXXXXXXX</Mobile> </Person> <Person name="mart"> <Name>王五</Name> <Mobile>789XXXXXXXX</Mobile> </Person> </Persons> |
這是一個 XML 的資料範例,如果想讀內部所有的成員資料,可用以下的方法讀出:
text.asp
<% Dim oXML, oXMLError, ReturnValue, x ' Initial component Set oXML = Server.CreateObject("MSXML2.DOMDocument") ' Set properties oXML.async = false oxml.setProperty "ServerHTTPRequest", true ' Load XML ReturnValue = oXML.Load("test.xml") ' Get data Set objNode = oXML.getElementsByTagName("Name") For x = objNode.length-1 To 0 Step-1 Response.Write objNode.item(x).Text&"<br/>" Next Set oXML = Nothing %> |
對已經有讀取 XML 經驗的人,相信應該對此語法很熟悉吧,
故在此不再贅述,
此範例會陸續印出「王五、李四、張三」。
故在此不再贅述,
此範例會陸續印出「王五、李四、張三」。
若是只想要印出某單位人事資料,譬如只想要 <Person name="sale"> 裡的兩人,
則可用:
則可用:
text.asp
<% Dim oXML, oXMLError, ReturnValue, x ' Initial component Set oXML = Server.CreateObject("MSXML2.DOMDocument") ' Set properties oXML.async = false oxml.setProperty "ServerHTTPRequest", true ' Load XML ReturnValue = oXML.Load("test.xml") ' Get data Set objNode = oXML.selectNodes("/Persons/Person[@name='sale']/Name") For each x in objNode Response.Write x.Text&"<br/>" Next Set oXML = Nothing %> |
其中標明的「"/Persons/Person[@name='sale']/Name"」這一行是使用了 XSL 擷取資料的技巧,
XSL 中有提供幾個關鍵字(摘自《最新 XML 入門與應用》,松崗電腦圖書資料股份有限公司):
XSL 中有提供幾個關鍵字(摘自《最新 XML 入門與應用》,松崗電腦圖書資料股份有限公司):
/ | 代表某一元素下一層的子元素 |
// | 代表某一元素之下的所有子元素,包含子元素下的子元素 |
. | 代表目前的節點位置,即模式設定所在的節點 |
.. | 代表目前節點的上一層節點,即模式設定的父節點 |
* | 表示任一子元素或屬性的萬用字元 |
@ | 代表某一元素的屬性 |
[] | 附加的選擇條件 |
| | 結合多個選擇路徑 |
所以「"/Persons/Person[@name='sale']/Name"」就代表取得 <Persons>下的<Person>中,name 屬性等於 sale的 <Name>標籤資料。