2010-10-26 37 views
0

J'ai une situation dans laquelle j'ai besoin de vider XML dans un jeu d'enregistrements ADODB dans VBScript. Mon XML est dans le formulaire ci-dessous. Ce que je voudrais faire dans mon code est de convertir le XML en un jeu d'enregistrements avec des lignes AddressObject. Le code ci-dessous j'ai essayé mais continue à courir dans une erreur de DomDocument après l'autre. Quelqu'un peut-il s'il vous plaît m'aider avec une solution pour cela? J'ai essayé le code ci-dessous dans Notepad ++ mais toujours incapable d'obtenir le bon résultat.VBScript Conversion de données XML en ADODB RecordSet

<?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 

Répondre

2

Ado ne peut pas gérer un jeu d'enregistrements xml. Je pense que vous devez utiliser l'ancien analyseur XML pour extraire les données. Vous pouvez le lancer dans un db puis utiliser ado pour manipuler les données une fois qu'elles sont dans une base de données.

Classic asp rend très difficile le travail avec les services Web Soap. Je suggère fortement de coder cette partie de votre application dans ASP.net ..