Как преобразовать строку в XML и получить значения XML ChildNode в Classic asp? - PullRequest
0 голосов
/ 01 декабря 2011

`Здесь я преобразовал одну строку в 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

Выше я не получаю количество дочерних узлов и Как получить значения дочернего узла.

Кто-нибудь может мне помочь?

Спасибо, Jagadi`

1 Ответ

4 голосов
/ 01 декабря 2011

Есть много проблем с вашим размещенным кодом.

Первый

Какой язык вы используете? Кажется, есть стили из VBScript и JScript. Это преимущественно VBScript, поэтому я предполагаю, что именно это вы и хотели использовать повсюду.

Второй

XML-объявление должно быть первыми символами в строке. То есть:

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

не

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

Третий

XML с пространствами имен требует объявления xml пространства имен в узле верхнего уровня, который использует пространство имен. Например, корневой узел.

<hub:notifications>

станет

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

Но вы бы заменили URL-адрес stackoverflow на соответствующий вам.

Четвертый

Если вы хотите перебрать дочерние узлы hub:notifications, вам нужно изменить замедление FOR на:

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

Пятый

i не увеличивается в вашем цикле, поэтому вы устанавливаете aryNotificationIDs(1) для различных значений узлов.

Шестой

Относится к первому. В VBScript нет оператора ++. И вам не нужны ни i, ни Count в цикле For.

Дополнительно

Вам не нужно перебирать узлы, чтобы получить счет. Вы можете использовать селектор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...