Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

ordenar xml

Estas en el tema de ordenar xml en el foro de Visual Basic clásico en Foros del Web. Hola, Os comento lo que necesito a ver si me podéis ayudar. Tengo un función en la que guardo unas datos en unas variables y ...
  #1 (permalink)  
Antiguo 09/01/2014, 03:01
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años, 1 mes
Puntos: 7
ordenar xml

Hola,
Os comento lo que necesito a ver si me podéis ayudar.
Tengo un función en la que guardo unas datos en unas variables y esta después de llamar a unas funciones que hacen unas comprobaciones, crea el primer tag de un xml y llama varias veces a una función que lo que hace es cargar los datos en el xml y al salir del bucle que hay en la primera función llama de nuevo a esa función que genera el xml para cargar los datos que faltan ya que los datos que faltan son cosas que tengo que calcular de lo anterior.

Os dejo la función esta para que entendáis mejor (marco en negrita la función que se encarga de generar el xml):

Código vb:
Ver original
  1. Private Sub sExtraerDatosXML(ByVal oCentro)
  2. Dim oHijo, oNieto, oBizNieto, oRaiz   As MSXML2.IXMLDOMNode
  3. Dim oXMLDocFSGS As MSXML2.DOMDocument60
  4.  
  5. On Error GoTo error:
  6.  
  7.     If oCentro.Attributes(0).baseName = "code" Then
  8.         strInCODE = oCentro.Attributes(0).Text
  9.         strInCODE = Left(strInCODE, 15) 'ACORTAR A 100
  10.    End If
  11.  
  12.     iImporte = 0
  13.  
  14.     For Each oHijo In oCentro.childNodes
  15.         Select Case oHijo.nodeName
  16.             Case "FirstPeriod"
  17.                 strInFECINIYEAR = IIf(IsNull(oHijo.Attributes(0).Text), "", oHijo.Attributes(0).Text)
  18.                 strInFECINIMTH = IIf(IsNull(oHijo.Attributes(1).Text), "", oHijo.Attributes(1).Text)
  19.             Case "LastPeriod"
  20.                 strInFECFINYEAR = IIf(IsNull(oHijo.Attributes(0).Text), "", oHijo.Attributes(0).Text)
  21.                 strInFECFINMTH = IIf(IsNull(oHijo.Attributes(1).Text), "", oHijo.Attributes(1).Text)
  22.             Case "AssetCategories"
  23.                 Call sValidarDatosCode
  24.                 FechaINI = DateSerial(strInFECINIYEAR, strInFECINIMTH + 0, 1)
  25.                 FechaFIN = DateSerial(strInFECFINYEAR, strInFECFINMTH + 1, 0)
  26.                 Call calcularUON1(strInCODE)
  27.                 'GENERAR PRIMERA PARTE DEL XML
  28.                Set oXMLDocFSGS = New MSXML2.DOMDocument60            
  29.                 Set oRaiz = oXMLDocFSGS.createNode(NODE_ELEMENT, "PARTIDAS", "")
  30.                 oXMLDocFSGS.appendChild oRaiz
  31.                
  32.                 For Each oNieto In oHijo.childNodes
  33.                     Select Case oNieto.nodeName
  34.                         Case "AssetCategory"
  35.                             strInCATEGORYCODE = IIf(IsNull(oNieto.Attributes(0).Text), "", oNieto.Attributes(0).Text)
  36.                             strInCATEGORYDESCRIPT = IIf(IsNull(oNieto.Attributes(1).Text), "", oNieto.Attributes(1).Text)
  37.                             strInCATEGORYCASH = IIf(IsNull(oNieto.Attributes(2).Text), "", oNieto.Attributes(2).Text)
  38.                             For Each oBizNieto In oNieto.childNodes
  39.                                 Select Case oBizNieto.nodeName
  40.                                     Case "AccountingAmount"
  41.                                         strInAMOUNTCURRENCY = IIf(IsNull(oBizNieto.Attributes(0).Text), "", oBizNieto.Attributes(0).Text)
  42.                                         strInIMPORTE = IIf(IsNull(oBizNieto.Text), "", oBizNieto.Text)
  43.                                 End Select
  44.                             Next
  45.                     End Select
  46.                     'guarda en importe para luego mandarlo en el importe general
  47.                    iImporte = CDbl(Replace(strInIMPORTE, ".", ",")) + iImporte                    
  48.                     Call sValidarDatosCategory(CDbl(Replace(strInIMPORTE, ".", ",")))
  49.                     [B]TratarAsset oXMLDocFSGS, oRaiz, strACCIONNivel2, strInCATEGORYDESCRIPT, strInCATEGORYCODE, CDbl(Replace(strInIMPORTE, ".", ",")), strInCODE[/B]
  50.                 Next
  51.         End Select
  52.     Next
  53.     'genera los datos del xml que faltan metiendo el importe general
  54.    [B]TratarAsset oXMLDocFSGS, oRaiz, strACCIONNivel1, "code", strInCODE, iImporte, strInCODE[/B]
  55.     Set oHijo = Nothing
  56.     Exit Sub
  57. error:
  58. End Sub
__________________
Gracias por todo;

Un saludo
  #2 (permalink)  
Antiguo 09/01/2014, 03:02
 
Fecha de Ingreso: abril-2012
Mensajes: 449
Antigüedad: 12 años, 1 mes
Puntos: 7
Respuesta: ordenar xml

Y esta es la función que me genera el xml:
Código vb:
Ver original
  1. Public Sub TratarAsset(oXMLDocFSGS, oRaiz, accion, Descript, Codigo, importe, CodGeneral)
  2.     Dim oFos As FileSystemObject
  3.     Dim oFosGes As FileSystemObject
  4.     Dim Carpeta As Folder
  5.     Dim CarpetaUnidadesGestion As Folder
  6.     Dim Archivo As File
  7.     Dim ArchivoUniGestion As File
  8.     Dim ostream As Scripting.TextStream
  9.     Dim ostreamUniGestion As Scripting.TextStream
  10.     Dim Carpetabackup As String
  11.     Dim saux As String
  12.     Dim sauxUniGestion As String
  13.     Dim sNombreFichero As String, sFicheroLeer As String, sNombreFicheroGestion As String
  14.     Dim sIdFich As String
  15.     Dim iIdSecuencial As Double
  16.     Dim sFicheroEscribir As String
  17.    
  18.     Dim bHayCambios As Boolean, bHayUnCambio As Boolean
  19.     'Dim oXMLDocFSGS As MSXML2.DOMDocument60
  20.    Dim oNodoLinea, oNombre, oValor, oNodoUons, oNodoUon, oNodoImps, oNodoImp As MSXML2.IXMLDOMNode
  21.     Dim i As Long
  22.     'Variables para recoger los datos de unidades de gestion
  23.    Dim sCodUnidadGes, sExpedienteGestor, sDescrUnidadGes, sCodArea, sCodZona As String
  24.     Dim unidadGestionEncontrada As Boolean
  25.    
  26.     Dim oIdi As CIdioma
  27.     Dim oIdiomas As CIdiomas
  28.    
  29.     Dim sDescrCorta As String
  30.        
  31.     On Error GoTo error:
  32.    
  33. '    '<PARTIDAS>
  34. '    Set oXMLDocFSGS = New MSXML2.DOMDocument60
  35. '
  36. '    Set oRaiz = oXMLDocFSGS.createNode(NODE_ELEMENT, "PARTIDAS", "")
  37. '    oXMLDocFSGS.appendChild oRaiz
  38.  
  39.     '<PARTIDA>
  40.    Set oNodoLinea = oXMLDocFSGS.createNode(NODE_ELEMENT, "PARTIDA", "")
  41.     oRaiz.appendChild oNodoLinea
  42.        
  43.     '<ACCION> Acción que afecta a los datos CHAR(1)</ACCION>
  44.    Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "ACCION", "")
  45.     oNodoLinea.appendChild oNombre
  46.     Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  47.     oValor.nodeValue = accion
  48.     oNombre.appendChild oValor
  49.     '<PRES0> Identificador del nodo raiz VARCHAR(20)</PRES0>
  50.    Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "PRES0", "")
  51.     oNodoLinea.appendChild oNombre
  52.     Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  53.     oValor.nodeValue = sPres0
  54.     oNombre.appendChild oValor
  55.     '<PRES1>Identificador del nivel 1 VARCHAR(20)</PRES1>
  56.    Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "PRES1", "")
  57.     oNodoLinea.appendChild oNombre
  58.     Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  59.     oValor.nodeValue = CodGeneral
  60.     oNombre.appendChild oValor
  61.    
  62.     If Codigo <> CodGeneral Then
  63.         '<PRES2>Identificador del nivel 2 VARCHAR(20)</PRES2>
  64.        Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "PRES2", "")
  65.         oNodoLinea.appendChild oNombre
  66.         Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  67.         oValor.nodeValue = Codigo
  68.         oNombre.appendChild oValor
  69.     End If
  70.      
  71.     '<USU>Código usuario VARCHAR(20)</USU>
  72.    Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "USU", "")
  73.     oNodoLinea.appendChild oNombre
  74.     Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  75.     oValor.nodeValue = "Integration"
  76.     oNombre.appendChild oValor
  77.    
  78.     '<FECACT>Fecha actualización (mm-dd-yyyy hh:mm:ss)</FECACT>
  79.    Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "FECACT", "")
  80.     oNodoLinea.appendChild oNombre
  81.     Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  82.     oValor.nodeValue = Format(Now, "mm-dd-yyyy hh:mm:ss")
  83.     oNombre.appendChild oValor
  84.                  
  85.     '''pres5_idiomas
  86.    If Descript = "code" Then
  87.         sDescrCorta = Codigo
  88.     Else
  89.         sDescrCorta = Descript
  90.     End If
  91.      
  92.     If Not IsNull(sDescrCorta) Then
  93.    
  94.         'Carga todos los idiomas de la aplicación:
  95.        Set oIdiomas = DevolverIdiomas(m_oConexion, False, True)
  96.        
  97.             For Each oIdi In oIdiomas
  98.                 '<DEN_XXX> Denominación del nivel en el idioma correspondiente VARCHAR(200)</DEN_XXX>
  99.                Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "DEN_" & UCase(oIdi.Cod), "")
  100.                 oNodoLinea.appendChild oNombre
  101.                 Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  102.                 oValor.nodeValue = sDescrCorta
  103.                 oNombre.appendChild oValor
  104.             Next
  105.        
  106.             Set oIdi = Nothing
  107.             Set oIdiomas = Nothing
  108.     End If
  109.    
  110.     ''pres5_importes
  111.     'SI NO ES NI I ni U tengo que hacer esto?
  112.     If Not IsNull(FecINI) And Not IsNull(FecFIN) Then
  113.          '<IMPORTES>
  114.         Set oNodoImps = oXMLDocFSGS.createNode(NODE_ELEMENT, "IMPORTES", "")
  115.          oNodoLinea.appendChild oNodoImps
  116.          '    <IMPORTE>
  117.         Set oNodoImp = oXMLDocFSGS.createNode(NODE_ELEMENT, "IMPORTE", "")
  118.          oNodoImps.appendChild oNodoImp
  119.          '        <ACCION_IMPORTE>Acción que afecta a las vigencias e importes CHAR(1)</ACCION_IMPORTE>
  120.         Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "ACCION_IMPORTE", "")
  121.          oNodoImp.appendChild oNombre
  122.          Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  123.          oValor.nodeValue = accion  'I para los nuevos, U para los que ya existen de forma que se actualice PRES5_IMPORTES sobre el registro activo
  124.         oNombre.appendChild oValor
  125.          '        <FEC_INI> Fecha inicio validez (mm-dd-yyyy)</FEC_INI>
  126.         Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "FEC_INI", "")
  127.          oNodoImp.appendChild oNombre
  128.          Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  129.          oValor.nodeValue = FechaINI 'meter la fecha ini calculada
  130.         oNombre.appendChild oValor
  131.          '        <FEC_FIN> Fecha fin validez (mm-dd-yyyy) </FEC_FIN>
  132.         Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "FEC_FIN", "")
  133.          oNodoImp.appendChild oNombre
  134.          Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  135.          oValor.nodeValue = FechaFIN 'meter la fecha fin calculada
  136.         oNombre.appendChild oValor
  137.          '       <MON>
  138.         Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "MON", "")
  139.          oNodoImp.appendChild oNombre
  140.          Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  141.          oValor.nodeValue = strInAMOUNTCURRENCY 'Valor por defecto
  142.         oNombre.appendChild oValor
  143.          '       <PRES>
  144.         Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "PRES", "")
  145.          oNodoImp.appendChild oNombre
  146.          Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  147.          oValor.nodeValue = importe 'dependiendo de si viene del asset meter el de cada asset y si no meter el total
  148.         oNombre.appendChild oValor
  149.          
  150.          '</IMPORTES>
  151.     End If
  152.      
  153.      ''pres5_uons
  154.     If accion = "I" Then 'En las modificaciones este dato no cambia
  155.         '<UONS>
  156.         Set oNodoUons = oXMLDocFSGS.createNode(NODE_ELEMENT, "UONS", "")
  157.          oNodoLinea.appendChild oNodoUons
  158.          '       <UON>
  159.         Set oNodoUon = oXMLDocFSGS.createNode(NODE_ELEMENT, "UON", "")
  160.          oNodoUons.appendChild oNodoUon
  161.          '           <ACCION_UON>Acción que afecta a las unidades organizativas relacionadas , CHAR(1)</ACCION_UON>
  162.         Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "ACCION_UON", "")
  163.          oNodoUon.appendChild oNombre
  164.          Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  165.          oValor.nodeValue = accion
  166.          oNombre.appendChild oValor
  167.          '                <UON1> Código nivel UON1 VARCHAR(3)</UON1>
  168.         Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "UON1", "")
  169.          oNodoUon.appendChild oNombre
  170.          Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  171.          oValor.nodeValue = sUON1
  172.          oNombre.appendChild oValor
  173.          '                <UON2> Código nivel UON2 VARCHAR(3)</UON2>
  174.         Set oNombre = oXMLDocFSGS.createNode(NODE_ELEMENT, "UON2", "")
  175.          oNodoUon.appendChild oNombre
  176.          Set oValor = oXMLDocFSGS.createNode(NODE_TEXT, "", "")
  177.          oValor.nodeValue = sUON2
  178.          oNombre.appendChild oValor
  179.          '       </UON>
  180.         '</UONS>
  181.     End If
  182.      '</PARTIDA>
  183. '        End If
  184. '        '</PARTIDAS>
  185.  
  186.     Set ostream = Nothing    
  187.     Set Archivo = Nothing
  188.     Set Carpeta = Nothing
  189.     Set oFos = Nothing
  190.     Exit Sub
  191.    
  192. error:
  193. End Sub

Necesito que lo que introduzco en la función TratarAsset la ultima vez que accedo a ella, es decir, fuera del for, la parte del xml que me genera la coloque arriba del todo, ya que esta tiene que ser la primera parte del xml.
Si queréis os puedo mostrar el xml que me genera.
Alguien me puede ayudar?
__________________
Gracias por todo;

Un saludo

Etiquetas: xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:06.