访问XML属性

时间:2016-01-22 13:28:52

标签: xml asp-classic

我有一个包含节点和属性的XML文件。我正在使用经典ASP访问和接收来自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

我在访问节点时没有任何问题,但我需要获取属性值&#34;类别&#34;,所以我尝试了类似

的内容
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行完全错了。你能帮我解决这个问题吗?

1 个答案:

答案 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