** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - SOAP y Access
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoSOAP y Access

 Responder Responder Página  <12
Autor
Mensaje
poseido Ver desplegable
Habitual
Habitual


Unido: 16/Octubre/2009
Estado: Sin conexión
Puntos: 154
Enlace directo a este mensaje Enviado: 19/Agosto/2016 a las 11:38
Publicado originalmente por Mihura Mihura escribió:

Esta es una explicación bastante decente:




Y ésta es mucho más explícita, aunque está en extranjero LOL


mucahs gracias! lo leeré

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 9670
Enlace directo a este mensaje Enviado: 19/Agosto/2016 a las 11:42
Wink



Dejamos abierto el tema, para dar tiempo a Emililove si quiere aportar algo ...


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
poseido Ver desplegable
Habitual
Habitual


Unido: 16/Octubre/2009
Estado: Sin conexión
Puntos: 154
Enlace directo a este mensaje Enviado: 19/Agosto/2016 a las 14:20
solo una pregunta más, el open y close que graba el fichero xml a disco... sobrescribe los ficheros, o al terminar la rutina debería borrar de alguna manera el fichero?
me estoy encontrando que el código no corre bien si no elimino los ficheros del disco.

he añadido este código just antes de crear el fichero corregido:

' comprobar si existe el fichero, y eliminarlo
      Dim aFile As String
      aFile = CurrentProject.Path & "\pruebaforo1.xml"
       If Len(Dir$(aFile)) > 0 Then
        Kill aFile
       End If


y ya me funciona bien todo.

millones de gracias!



Editado por poseido - 19/Agosto/2016 a las 14:26
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4361
Enlace directo a este mensaje Enviado: 19/Agosto/2016 a las 16:57
Muy cierto Jesús, pero solo si intentamos escribir el XSL en el documento, si lo tenemos en un archivo funciona perfecto, me falta hacer mas pruebas sobre la codificación para detectar el error o tratar de hacerlo con Print Cry  pero de momento este es funcional.


Solo hay que colocar el archivo xsl en el mismo directorio que la base, y te crea un archivo xml de la respuesta del soap en el mismo directorio y de nombre Prueba.xml.

Saludos.

Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4361
Enlace directo a este mensaje Enviado: 19/Agosto/2016 a las 18:13
Ya funciona eran las Mayusculas


Saludos.

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 9670
Enlace directo a este mensaje Enviado: 19/Agosto/2016 a las 18:57
Yo propongo un método más Espartano y más simple, ya que no necesitamos una StyleSheet.

No vuelvo a escribir el archivo en disco ya que gracias a Emiliove descubrí que existe xDoc.loadXML


Dos caminos:

El primero incluir el :xsi que nos hace falta:

Private Sub CmdArreglo1_Click()
Dim Xs As String, NumFic As Integer
Dim xNodes As MSXML2.IXMLDOMNodeList
Dim xNode As IXMLDOMNode

' abrimos el archivo XML
    NumFic = FreeFile
    Open CurrentProject.Path & "\pruebaforo.xml" For Binary As #NumFic
    Xs = Space$(LOF(1))
    Get #NumFic, , Xs
    Close #NumFic
    
    ' arreglamos la clave
    Xs = Replace(Xs, "xmlns=", "xmlns:xsi=", 1, 1)

    
    ' tratamos el XML
    Set xDoc = New MSXML2.DOMDocument60
    xDoc.async = False
    xDoc.loadXML Xs
    
    Set xNodes = xDoc.selectNodes("//MobilePhone")
    For Each xNode In xNodes
        Debug.Print xNode.Text
    Next
    Set xDoc = Nothing
End Sub



El segundo limpiar por completo la clave:

Private Sub CmdArreglo1_Click()
Dim Xs As String, NumFic As Integer
Dim xNodes As MSXML2.IXMLDOMNodeList
Dim xNode As IXMLDOMNode

  ' abrimos el archivo XML
    NumFic = FreeFile
    Open CurrentProject.Path & "\pruebaforo.xml" For Binary As #NumFic
    Xs = Space$(LOF(1))
    Get #NumFic, , Xs
    Close #NumFic
    
    ' llamamos a la funcion que nos limpia la clave indicada
    Xs = RT_LimpiarCabXML(Xs, "ServiceRequest")
    
    ' tratamos el XML
    Set xDoc = New MSXML2.DOMDocument60
    xDoc.async = False
    xDoc.loadXML Xs
    
    Set xNodes = xDoc.selectNodes("//MobilePhone")
    For Each xNode In xNodes
        Debug.Print xNode.Text
    Next
    Set xDoc = Nothing
End Sub

Function RT_LimpiarCabXML(StringXml As String, Clave As String) As String
Dim i As Integer, j As Integer
    i = InStr(1, StringXml, Clave & " ")
    j = InStr(i, StringXml, ">")
    RT_LimpiarCabXML = Mid$(StringXml, 1, i + Len(Clave)) & Mid$(StringXml, j)
End Function



Yo me voy a quedar con el segundo .... LOL. Gracias a Emiliove por la pista del LoadXML que me permite no tener que grabar en disco el archivo XML modificado.


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4361
Enlace directo a este mensaje Enviado: 19/Agosto/2016 a las 19:28
Bueno ya tiene dos formas (digo cuatro dos y dos) para entretenerse, una pregunta Jesús, porque abres el xml con Open y no con Msxml ¿Es mejor, o solo costumbre?

Saludos.




Editado por emiliove - 19/Agosto/2016 a las 19:29
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 9670
Enlace directo a este mensaje Enviado: 19/Agosto/2016 a las 19:35
Lo que hago es cargar el fichero completo en una variable, para poder modificar el literal que nos esta dando por saco.

Y el método más rápido de hacerlo (que yo conozca) es abrirlo como un fichero binario ...

¿Es esa la pregunta?


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
poseido Ver desplegable
Habitual
Habitual


Unido: 16/Octubre/2009
Estado: Sin conexión
Puntos: 154
Enlace directo a este mensaje Enviado: 19/Agosto/2016 a las 21:47
Anonadado me quedo con el nivel en el foro...

Gracias!
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4361
Enlace directo a este mensaje Enviado: 20/Agosto/2016 a las 01:16
Pero no has indicado si cerramos ya, mientras nos dices, pongo como usaría yo la función de Jesús usando solo msxml:


Private Sub Comando1_Click()
Dim xmldom As MSXML2.DOMDocument60
Set xmldom = New MSXML2.DOMDocument60
Dim x As String

    xmldom.Load CurrentProject.Path & "\pruebaforo.xml"
                        
    x = xmldom.XML
    x = RT_LimpiarCabXML(x, "ServiceRequest")
    Debug.Print x
    xmldom.loadXML x
    MsgBox xmldom.selectSingleNode("//MobilePhone").Text

Set xmldom = Nothing
End Sub

Function RT_LimpiarCabXML(StringXml As String, Clave As String) As String
Dim i As Integer, j As Integer
    i = InStr(1, StringXml, Clave & " ")
    j = InStr(i, StringXml, ">")
    RT_LimpiarCabXML = Mid$(StringXml, 1, i + Len(Clave)) & Mid$(StringXml, j)
End Function


Es indistinto usar selectNodes o selectSingleNode, ambos son métodos de selección de XPath, pero el método selectSingleNode devuelve el primer nodo que cumple con la selección, en cambio el método selectNodes devuelve una lista de nodos por eso declaramos IXMLDOMNodeList y creamos un bucle y solo entonces podemos obtener el nodo en cuestión, debemos usar selectNodes cuando se repite el nodo y queremos todos los valores y usar selectSingleNode cuando solo vamos a recoger un valor.

Saludos.

Editado por emiliove - 20/Agosto/2016 a las 02:00
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: España
Estado: Sin conexión
Puntos: 9670
Enlace directo a este mensaje Enviado: 20/Agosto/2016 a las 12:10
Tengo yo que ponerme a estudiar el uso de las librerías DOM, que se lo justito. Unhappy

¡Que fácil queda!. Tongue


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
poseido Ver desplegable
Habitual
Habitual


Unido: 16/Octubre/2009
Estado: Sin conexión
Puntos: 154
Enlace directo a este mensaje Enviado: 20/Agosto/2016 a las 13:22
Hola, por mi parte está todo aclarado (y mucho más!).

gracias. 

yo por mi parte sigo con la BD a ver si puedo hacer la inversa, subir datos al servicor a traves de SOAP.

gracias!


Arriba
 Responder Responder Página  <12
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable