Imprimir página | Cerrar ventana

Quitar espacio de nombre en XML

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Tus Funciones Favoritas & Aportaciones & Artí­culos
Descripción del foro: Para publicar código interesante, aportaciones y artículos
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=82050
Fecha de impresión: 05/Abril/2020 a las 07:04


Tema: Quitar espacio de nombre en XML
Publicado por: emiliove
Asunto: Quitar espacio de nombre en XML
Fecha de publicación: 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




Imprimir página | Cerrar ventana