Классический ASP - парсинг xml с определенным форматом - PullRequest
0 голосов
/ 06 ноября 2018

Я хотел бы извлечь столбцы и значения для каждого кода группы из приведенного ниже XML.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<MAIN-MENU>
    <GRPCODE1>
        <COLUMNS>ColA~ColB</COLUMNS>
        <VALUE1>Value11~Value12</VALUE1>
        <VALUE2>Value21~Value22</VALUE2>
    </GRPCODE1>
    <GRPCODE2>
        <COLUMNS>ColA~ColB~ColC</COLUMNS>
        <VALUE1>Value11~Value12~Value13</VALUE1>
        <VALUE2>Value21~Value22~Value23</VALUE2>
        <VALUE3>Value31~Value32~Value23</VALUE3>
    </GRPCODE2>
</MAIN-MENU>
Set objXMLResponse = Server.CreateObject("Microsoft.XMLDOM")
objXMLResponse.Async = False
objXMLResponse.LoadXML(strXML)
If objXMLDoc.parseError.errorcode = 0 Then
    Dim node
    Dim groupNode
    'Iterate through each group code
    For Each groupNode in xml.selectSingleNode("/MAIN-MENU").childNodes
        Dim row
        Dim colArray, valueArray
        row = 0
        For Each node in groupNode.childNodes
            'Iterate through the columns and values
            Response.Write("<br>" & Server.HTMLEncode(node.xml) & "<br>")
            If row = 0 Then
                colArray = Split(node.xml, "~")
            Else
                valueArray = Split(node.xml, "~")
            End If
            'Processing code goes here
            row = row + 1
        Next
    Next
End If

У меня есть вышеуказанный код, но он не повторяется. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 ноября 2018

Я благодарю SearchAndResQ и Джона за ваш вклад. Я решил проблему с помощью следующего кода для доступа к столбцу и информации о значении.

Set objGroup1 = objXMLResponse.getElementsByTagName("GRPCODE1/COLUMNS")(0)
arrayColumns = Split(objGroup1.text, "~")
'Get the index from ArrayColumns for the needed columns
'Then Getting the values for the indexids from the values array.
Dim idx
For idx = 1 to 99
    strTag = "GRPCODE1/VALUE" & CStr(idx)
    Set objValue = objXMLResponse.getElementsByTagName(strTag)(0)
    If Len(objValue.text) = 0 Then
        Exit For
    End If
    arrayValueDetail = Split(objValue.text, "~")
    'process arrayValueDetail and store results
    set objValue = Nothing
Next
...