如何将字符串转换为XML&在Classic asp中获取XML ChildNode值?

时间:2011-12-01 11:27:40

标签: asp-classic

`这里我将一个字符串转换为XML:

xmlString  =    
  "   <?xml version='1.0' encoding='UTF-8' standalone='yes'?>" & _
  "   <hub:notifications>"  & _
  "   <hub:notificationId>728dc361-8b4f-4acc-ad2d-9a63125c5114</hub:notificationId>" & _
  "   <hub:notificationId>5b7c6989-ee27-422c-bbed-2f2c36136c5b</hub:notificationId>" & _
  "   <hub:notificationId>67d1fffe-ab3f-43e3-bb03-24926debe2dc</hub:notificationId>" & _
  "   </hub:notifications>"

objXML.LoadXml(xmlString)

set Node = objXML.selectSingleNode("hub:notifications/hub:notificationId")

   i = 0
   Count = 0
    For Each Node In objXML.selectNodes("hub:notifications") 
       ReDim Preserve aryNotificationIDs (i + 1)
       aryNotificationIDs(i) = Node.selectSingleNode("hub:notificationId").text 
       Count++        
    Next 
  Response.write Count

在上面,我没有得到Count of Child节点 以及如何获取子节点值。

任何人都可以帮助我吗?

谢谢, Jagadi`

1 个答案:

答案 0 :(得分:4)

您发布的代码存在许多问题。

首先

您使用的语言是什么?似乎有来自VBScript和JScript的样式。它主要是VBScript,所以我假设这是你打算在整个过程中使用的。

第二

XML declaration必须是字符串中的第一个字符。 那就是:

"<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" & _

" <?xml version='1.0' encoding='UTF-8' standalone='yes'?>" & _

第三

带名称空间的XML在顶级节点中需要使用命名空间的xml namespace声明。 例如根节点。

<hub:notifications>

会变成

<hub:notifications xmlns:hub='http://stackoverflow.com'>

但是你应该用适合你的一个替换stackoverflow URL。

如果要遍历hub:notifications的子节点,则需要将FOR减速更改为:

For Each Node In objXML.selectSingleNode("hub:notifications").childNodes

第五

i在您的循环中没有增加,因此您将aryNotificationIDs(1)设置为节点的不同值。

第六

与第一个相关。 VBScript中没有++运算符。并且您在For循环中不需要iCount

另外

您无需在节点中循环以获取计数。您可以使用xpath选择器和length属性。例如。 objXML.selectNodes("hub:notifications/hub:notificationId").length

最后

我已经带了你的代码并应用了上面的建议,我还包括一个错误检查部分,用于检查xml是否已正确加载。下面的代码将输出hub:notificationId个节点的计数,并列出数组aryNotificationIDs中的所有值。我删除了其他多余的代码。

xmlString  =  "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" & _
  "   <hub:notifications xmlns:hub='http://stackoverflow.com'>"  & _
  "   <hub:notificationId>728dc361-8b4f-4acc-ad2d-9a63125c5114</hub:notificationId>" & _
  "   <hub:notificationId>5b7c6989-ee27-422c-bbed-2f2c36136c5b</hub:notificationId>" & _
  "   <hub:notificationId>67d1fffe-ab3f-43e3-bb03-24926debe2dc</hub:notificationId>" & _
  "   </hub:notifications>"

Set objXML = Server.CreateObject("Msxml2.DOMDocument")
objXML.LoadXml(xmlString)
If objXML.parseError.errorCode <> 0 Then
    Response.Write "<p>Parse Error Reason: " & objXML.parseError.reason & "</p>"
Else
    For Each node In objXML.selectSingleNode("hub:notifications").childNodes
        ReDim Preserve aryNotificationIDs(i)
        aryNotificationIDs(i) = node.text
        i = i + 1
    Next
    Response.Write "<p>Count: " & i & "</p>"
    For j = 0 to i - 1
        Response.Write "<p>aryNotificationIDs(" & j & ") = " & aryNotificationIDs(j) & "</p>"
    Next
End If