** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Tus Funciones Favoritas & Aportaciones & Artí­culos
  Mensajes nuevos Mensajes nuevos RSS - Quitar espacio de nombre en XML
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoQuitar espacio de nombre en XML

 Responder Responder
Autor
Mensaje
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5109
Enlace directo a este mensaje Tema: Quitar espacio de nombre en XML
    Enviado: 20/Agosto/2016 a las 15:31
El Sr. Mihura (Jesús Mansilla) nos regalo una función para eliminar el espacio de nombre (namespace).
Como recordaremos un archivo Xml puede estar bien formado y aun así cuando recorremos sus nodos con XPath nos lanza: error 91 en tiempo de ejecución, Variable de objeto o bloque with no establecido. El espacio de nombre no es estándar y no le gusta a xPath, la forma de eliminar el espacio de nombre es:
Private Sub Comando1_Click()
Dim xmldom As MSXML2.DOMDocument60
Set xmldom = New MSXML2.DOMDocument60
Dim x As String

    xmldom.Load CurrentProject.Path & "\pruebaforo.xml" ´ pruebaforo es el nombre y ruta del archivo.
                  
    x = xmldom.XML
    x = RT_LimpiarCabXML(x, "ServiceRequest") ´ ServiceRequest es el nodo del espacio de nombre
    Debug.Print x
    xmldom.loadXML x
    MsgBox xmldom.selectSingleNode("//MobilePhone").Text ´ MobilePhone es el nodo que queremos la información

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


Otra forma usando Transformaciones lo podemos hacer así:

Private Sub Mobile_Click()
Dim xmldom As MSXML2.DOMDocument60
Dim xslDoc As MSXML2.DOMDocument60
Dim xmlTDoc As MSXML2.DOMDocument60
Set xmldom = New MSXML2.DOMDocument60

       xmldom.Load CurrentProject.Path & "\pruebaforo.xml" ´ pruebaforo es el nombre y ruta del archivo
                     
    Set xslDoc = New MSXML2.DOMDocument60
       
       xslDoc.loadXML "<xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" version=""1.0"">" & _
                      "    <xsl:template match=""*"">" & _
                      "      <xsl:element name=""{local-name()}"">" & _
                      "      <xsl:apply-templates select=""@* | node()"" />" & _
                      "      </xsl:element>" & _
                      "      </xsl:template>" & _
                      "      <xsl:template match=""@*"">" & _
                      "      <xsl:attribute name=""{local-name()}"">" & _
                      "      <xsl:value-of select=""."" />" & _
                      "      </xsl:attribute>" & _
                      "      </xsl:template>" & _
                      "      <xsl:template match=""text() | comment() | processing-instruction()"">" & _
                      "      <xsl:copy />" & _
                      "      </xsl:template>" & _
                      "      </xsl:stylesheet>"
                     
                     
xmldom.async = False
xslDoc.async = False
Set xmlTDoc = New MSXML2.DOMDocument60
xmldom.transformNodeToObject xslDoc, xmlTDoc
MsgBox xmlTDoc.selectSingleNode("//MobilePhone").Text ´ MobilePhone nodo a buscar
xmlTDoc.Save CurrentProject.Path & "\Prueba.xml" ´ Guardamos el archivo si queremos

Set xmldom = Nothing
Set xslDoc = Nothing
Set xmlTDoc = Nothing

End Sub



Editado por emiliove - 20/Agosto/2016 a las 15:43
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable