Asp classic 如何将字符串转换为XML&;在经典asp中获取XML子节点值?

Asp classic 如何将字符串转换为XML&;在经典asp中获取XML子节点值?,asp-classic,Asp Classic,`在这里,我将一个字符串转换为XML: xmlString = " <?xml version='1.0' encoding='UTF-8' standalone='yes'?>" & _ " <hub:notifications>" & _ " <hub:notificationId>728dc361-8b4f-4acc-ad2d-9a63125c5114</hub:notificationId>

`在这里,我将一个字符串转换为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
xmlString=
"   " & _
"   "  & _
“728dc361-8b4f-4acc-ad2d-9a63125c5114”和_
“5b7c6989-ee27-422c-bbed-2f2c36136c5b”和_
“67d1fffe-ab3f-43e3-bb03-24926debe2dc”和_
"   "
LoadXml(xmlString)
set Node=objXML.selectSingleNode(“hub:notifications/hub:notificationId”)
i=0
计数=0
对于objXML.selectNodes中的每个节点(“集线器:通知”)
ReDim通知ID(i+1)
AryNotificationId(i)=节点。选择SingleNode(“集线器:notificationId”)。文本
计数++
下一个
Response.write计数
在上面,我没有得到子节点的计数 以及如何获取子节点值。

有人能帮我吗

谢谢,
Jagadi`

您发布的代码有很多问题

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

第二 必须是字符串中的第一个字符。 即:

”&

不是

”&

第三 具有名称空间的XML需要在使用名称空间的顶级节点中声明。 例如,根节点

将成为

但是您可以使用适合您的URL替换stackoverflow URL

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

objXML中每个节点的
。选择SingleNode(“集线器:通知”)。childNodes

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

第六 与第一个有关。VBScript中没有
++
运算符。在For循环中,您不需要同时使用
i
Count

另外 您不需要在节点之间循环以获得计数。可以使用xpath选择器和length属性。例如,
objXML.selectNodes(“hub:notifications/hub:notificationId”)。长度

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

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
xmlString=”“&_
"   "  & _
“728dc361-8b4f-4acc-ad2d-9a63125c5114”和_
“5b7c6989-ee27-422c-bbed-2f2c36136c5b”和_
“67d1fffe-ab3f-43e3-bb03-24926debe2dc”和_
"   "
设置objXML=Server.CreateObject(“Msxml2.DOMDocument”)
LoadXml(xmlString)
如果objXML.parseError.errorCode为0,则
响应。写入“解析错误原因:&objXML.parseError.Reason&”

” 其他的 对于objXML中的每个节点。选择SingleNode(“集线器:通知”).childNodes ReDim通知ID(i) aryNotificationIDs(i)=node.text i=i+1 下一个 响应。写入“计数:&i&”

” 对于j=0到i-1 响应。写入“aryNotificationIDs(“&j&””=“&aryNotificationIDs(j)&”

” 下一个 如果结束
您发布的代码存在许多问题

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

第二 必须是字符串中的第一个字符。 即:

”&

不是

”&

第三 具有名称空间的XML需要在使用名称空间的顶级节点中声明。 例如,根节点

将成为

但是您可以使用适合您的URL替换stackoverflow URL

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

objXML中每个节点的
。选择SingleNode(“集线器:通知”)。childNodes

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

第六 与第一个有关。VBScript中没有
++
运算符。在For循环中,您不需要同时使用
i
Count

另外 您不需要在节点之间循环以获得计数。可以使用xpath选择器和length属性。例如,
objXML.selectNodes(“hub:notifications/hub:notificationId”)。长度

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

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
xmlString=”“&_
"   "  & _
“728dc361-8b4f-4acc-ad2d-9a63125c5114”和_
“5b7c6989-ee27-422c-bbed-2f2c36136c5b”和_
“67d1fffe-ab3f-43e3-bb03-24926debe2dc”和_
"   "
设置objXML=Server.CreateObject(“Msxml2.DOMDocument”)
LoadXml(xmlString)
如果objXML.parseError.errorCode为0,则
响应。写入“解析错误原因:&objXML.parseError.Reason&”

” 其他的 对于objXML中的每个节点。选择SingleNode(“集线器:通知”).childNodes ReDim通知ID(i) aryNotificationIDs(i)=node.text i=i+1 下一个 响应。写入“计数:&i&”

” 对于j=0到i-1 响应。写入“aryNotificationIDs(“&j&””=“&aryNotificationIDs(j)&”

” 下一个 如果结束
谢谢你的帮助。在