[ASP][Object][MSXML]loading XML By Asp

用ASP讀取XML

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
%>

此範例會陸續印出「王五、李四、張三」。

若是只想要印出某單位人事資料,譬如只想要 <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 入門與應用》,松崗電腦圖書資料股份有限公司):

 

關鍵字元 說明

/ 代表某一元素下一層的子元素
// 代表某一元素之下的所有子元素,包含子元素下的子元素
. 代表目前的節點位置,即模式設定所在的節點
.. 代表目前節點的上一層節點,即模式設定的父節點
* 表示任一子元素或屬性的萬用字元
@ 代表某一元素的屬性
[] 附加的選擇條件
| 結合多個選擇路徑

所以「"/Persons/Person[@name='sale']/Name"」就代表取得 <Persons>下的<Person>中,name 屬性等於 sale的 <Name>標籤資料。