2016-01-22 140 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