VBScript Преобразование данных XML в набор записей ADODB - PullRequest
0 голосов
/ 26 октября 2010

У меня есть ситуация, в которой мне нужно выгрузить XML в набор записей ADODB в VBScript. Мой XML находится в форме ниже. Что я хотел бы сделать в своем коде, так это преобразовать XML в набор записей со строками AddressObject. Код ниже, который я пробовал, но продолжаю сталкиваться с одной ошибкой DomDocument за другой. Может кто-нибудь, пожалуйста, помогите мне с решением для этого? Я попробовал код ниже в Notepad ++, но все еще не смог получить правильный результат.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
        <AuthorizationToken xmlns="http://www.avectra.com/2005/">
            <Token>8d92d5ba-8b06-4464-9829-86eacac68e6c</Token>
        </AuthorizationToken>
    </soap:Header>
    <soap:Body>
        <GetQueryResponse xmlns="http://www.avectra.com/2005/">
            <GetQueryResult>
                <AddressObjects xsi:schemaLocation="http://www.avectra.com/2005/ Address.xsd" recordReturn="1">
                    <AddressObject>
                        <adr_key>2bbcd09f-89c7-4558-93bb-ce23e832ab94</adr_key>
                        <adr_line1>1447 Limerick Lane</adr_line1>
                        <adr_line2 xsi:nil="true" />
                        <adr_line3 xsi:nil="true" />
                        <adr_city>Canyon Lake</adr_city>
                        <adr_state>TX</adr_state>
                        <adr_post_code>78133</adr_post_code>
                        <adr_city_state_code>Canyon Lake, TX  78133</adr_city_state_code>
                        <adr_country>UNITED STATES</adr_country>
                        <adr_intl_province xsi:nil="true" />
                        <adr_county>Comal</adr_county>
                        <adr_bad_address_flag>0</adr_bad_address_flag>
                        <adr_no_validation_flag>0</adr_no_validation_flag>
                        <cst_id>001049008I</cst_id>
                    </AddressObject>
                </AddressObjects>
            </GetQueryResult>
        </GetQueryResponse>
    </soap:Body>
</soap:Envelope>


Public Function XMLToRecSet(Byref objXMLDoc2) 
 Dim rsReturn  
 Dim node   
 Dim attr ,attrs
 Dim ObjXmlDoc 

        Set ObjXmlDoc = CreateObject("MSXML2.DOMDocument.3.0")
       'Create/open the disconnected recordset
  ObjXmlDoc = objXMLDoc2
  Set node = objXMLDoc.selectSingleNode("//AddressObject/")
    If( Not node Is Nothing) Then 
        Set rsReturn = CreateObject("ADODB.Recordset.6.0")

        Set attrs = node.getAttributes()
     for Each attr In attrs
      rsReturn.Fields.Append attr.nodeName, adVarWChar, 255
     Next 

     rsReturn.CursorLocation = adUseClient
     rsReturn.CursorType = adOpenStatic
     rsReturn.LockType = adLockOptimistic
     rsReturn.Open
    Set node = Nothing
     'Loop/add rows
     For Each node In objXMLDoc.selectNodes("//AddressObject/")
      rsReturn.AddNew
       For Each attr In node.Attributes
         If(Not rsReturn(attr.nodeName)Is NOTHING) Then
        rsReturn(attr.nodeName) = 1'attr.nodeValue
        End if
       Next  
     Next 

     If rsReturn.RecordCount <> 0 Then rsReturn.MoveFirst

   'cExit:
   End If 
   'Dispose DOM document
   Set objXMLDoc = Nothing

   Set XMLToRecSet = rsReturn
   Set rsReturn = Nothing

End Function

1 Ответ

2 голосов
/ 07 ноября 2010

Ado не может обработать набор записей xml.Я думаю, что вам нужно использовать старый синтаксический анализатор XML, чтобы получить данные.Вы можете выбросить его в базу данных, а затем использовать ado для манипулирования данными, когда они попадают в базу данных.

Классический asp сильно затрудняет работу с веб-сервисами Soap.Я настоятельно рекомендую кодировать эту часть вашего приложения в ASP.net.

...