访问 XML 个属性

Accessing XML Attributes

我有一个包含节点和属性的 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

我访问节点没有任何问题,但我需要获取属性值 "category",所以我尝试了

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

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

因为 select 节点并在不知道该节点是否实际存在的情况下使用它们的属性不是很聪明(selectSingleNode 可以 return Nothing,这将导致run-time 上面代码中的错误),下面的使用起来更安全:

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