我有一个包含节点和属性的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行完全错了。你能帮我解决这个问题吗?
答案 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