2016-01-22 102 views
1

我有一個包含節點和屬性的XML文件。我使用傳統的ASP訪問和接收來自XML的數據。但是XML文件具有一些我應該在屏幕上打印的屬性。訪問XML屬性

XML文件是一樣的東西

<root> 
<product> 
<node1>Node1 Value</node1> 
<node2>Node2 Value</node2> 
<attribute value="category">Category Name</attribute> 
</product> 
</root> 

而且我這個腳本

Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0") 
objXMLDoc.async = True 
objXMLDoc.load Server.MapPath("ProductList3.xml") 

Dim xmlProduct 
For Each xmlProduct In objXMLDoc.documentElement.selectNodes("product") 

    Dim node1 : node1 = xmlProduct.selectSingleNode("node1").text 
    Dim node2 : node2 = xmlProduct.selectSingleNode("node2").text 

    Response.Write "<b>node1:</b>" & Server.HTMLEncode(node1) & "<br> " 
    Response.Write "<b>node2:</b>" & Server.HTMLEncode(node2) & "<br>" %> 
Next 

我沒有訪問節點的任何問題,接收數據,但我需要得到屬性值「類別」,所以我想是這樣

Dim category : Set category = getText(xmlProduct.SelectNodes("root/product/attribute value[@name='category']") 

,但我接受")" required in line 52 error (err no:800a03ee)

Set category= getText(xmlProduct.SelectNodes("root/attribute value[@name='Category']") 

我得在該屬性的類別名稱,但無法找到任何解決方案,也許我是完全錯誤的管線52你們可以幫我解決這個問題?

+0

XML中沒有名爲'urun'的節點。請仔細檢查您的示例代碼是否與您的示例輸入文檔匹配。 – Tomalak

+0

編輯。謝謝。 –

回答

1
Dim productList, product, node1, node2, category 

Set productList = Server.CreateObject("MSXML2.DOMDocument.3.0") 
productList.async = False ' you don't want async document loading on the server 
productList.load Server.MapPath("ProductList3.xml") 

For Each product In productList.selectNodes("/root/product") 
    Set node1 = product.selectSingleNode("./node1") 
    Set node2 = product.selectSingleNode("./node2") 
    Set category = product.selectSingleNode("./attribute[@value='category']") 

    Response.Write "<b>node1:</b>" & Server.HTMLEncode(node1.text) & "<br>" 
    Response.Write "<b>node2:</b>" & Server.HTMLEncode(node2.text) & "<br>" 
    Response.Write "<b>category:</b>" & Server.HTMLEncode(category.text) & "<br>" 
Next 

因爲它不是很聰明地選擇節點,不知道該節點是否實際存在使用其財產(selectSingleNode可以返回Nothing,這將導致運行時在上面的代碼中的錯誤),以下是多少使用更安全:

For Each product In productList.selectNodes("/root/product") 
    node1 = GetText(product, "./node1") 
    node2 = GetText(product, "./node2") 
    category = GetText(product, "./attribute[@value='category']") 

    Response.Write "<b>node1:</b>" & Server.HTMLEncode(node1) & "<br>" 
    Response.Write "<b>node2:</b>" & Server.HTMLEncode(node2) & "<br>" 
    Response.Write "<b>category:</b>" & Server.HTMLEncode(category) & "<br>" 
Next 

Function GetText(context, xpath) 
    Dim node 
    GetText = "" 
    If Not context Is Nothing And xpath > "" Then 
     Set node = context.selectSingleNode(xpath) 
     If Not node Is Nothing Then GetText = node.text 
    End If 
End Function 
+0

謝謝你的幫助..編輯文本我希望這將幫助其他人很多。 –

+0

不幸的是,其中一個屬性中有一個「ç」字母。有沒有什麼辦法從這個屬性獲取數據:內容

+0

@Serhat上面的代碼可以讀取所有字符,不要更改它。你的情況下'ç'字符會發生什麼? – Tomalak