Foros del Web » Programando para Internet » ASP Clásico »

recorrer un xml usando DOMXMl de VBScript

Estas en el tema de recorrer un xml usando DOMXMl de VBScript en el foro de ASP Clásico en Foros del Web. Necesito ayuda!!!!!!!alguien sabe como recorrer un xml con las clases DOM???? me estoty volviendo loco.Por favor poner un codigo de ejemplo de un recorrido completo ...
  #1 (permalink)  
Antiguo 31/05/2007, 04:02
 
Fecha de Ingreso: mayo-2007
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
recorrer un xml usando DOMXMl de VBScript

Necesito ayuda!!!!!!!alguien sabe como recorrer un xml con las clases DOM???? me estoty volviendo loco.Por favor poner un codigo de ejemplo de un recorrido completo de un xml.

La idea es que tengo que mostrar toda la info del xml por pantalla sin hacer uso de xsl.

solo se que hay que hacer uso de esto

set docDom = Server.CreateObject("MSXML2.DOMDocument.3.0")

es pal currooooooo!!!!!

gracias por adelantado
  #2 (permalink)  
Antiguo 31/05/2007, 04:13
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 4 meses
Puntos: 7
Re: recorrer un xml usando DOMXMl de VBScript

Depende muchas cosas: Si lo quieres solo de nodos padres; si quieres buscar entre nodos hijos, etc

Echale un vistazo a esta página, es una guia de referencia del xmldom de ASP:

http://www.devguru.com/technologies/..._document.html

Una guia básica:

http://www.gamarod.com.ar/articulos/...de_xml_dom.asp



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 31/05/2007, 04:21
 
Fecha de Ingreso: mayo-2007
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Re: recorrer un xml usando DOMXMl de VBScript

quiero mostrar en html el siguiente xml:

<?xml version='1.0' encoding='iso-8859-1'?>
<categorias>
<categoria>
<padre>1</padre>
<codigo>1</codigo>
<nombre>Calidad</nombre>
<nivel>1</nivel>
<acceso></acceso>
<final>N</final>
</categoria>
<categoria>
<padre>1</padre>
<codigo>54</codigo>
<nombre>01 Documentos en vigor</nombre>
<nivel>2</nivel>
<acceso>S</acceso>
<final>S</final>
<documentos>
<documento>
<nombre>Relación de Procedimientos Generales</nombre>
<codigo>3153</codigo>
<autor></autor>
<path>documentos/categoria_1/doc_3153</path>
<formatos>
<formato>
<nombre>pdf</nombre>
<icono>/docPDF3.gif</icono>
<texto>ver_3151/form_3480/Relacion_Documentos.pdf </texto>
</formato>
</formatos>
</documento>
<documento>
<nombre>Relación de Procedimientos Operativos</nombre>
<codigo>97</codigo>
<autor></autor>
<path>documentos/categoria_1/doc_97</path>
<formatos>
<formato>
<nombre>word</nombre>
<icono/docWord3.gif</icono>
<texto>Relacion_Procedimientos_Operativos_.doc</texto>
</formato>
</formatos>
</documento></documentos>
</categoria>
</categorias>

Nose si tengo k hacer XMLNodes de esos o no hace falta, estoy perdido y deseperadoooo, yo siempre lo he hecho con xsl. No tienes un ejemplo de recorrido de un xml ??? bueno muxas gracias sobre todo.
  #4 (permalink)  
Antiguo 31/05/2007, 06:20
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 4 meses
Puntos: 7
Re: recorrer un xml usando DOMXMl de VBScript

Mira, te dejo una clase que hace, deshace, añade, crea, etc nodos y demas. La uso muy a menudo y funciona a la perfección. Al final hay un ejemplo de su uso. Echale un vistazo aunque el segundo enlace que te envié tiene un ejemplo más simple y el primero contiene TODAS las propiedades y métodos (DE OBLIGATORIO ESTUDIO)

Código:
Class objXML
  'strFile must be full path to document, ie C:\XML\XMLFile.XML
  'objDoc is the XML Object
  'Save to a file or not
  Private strFile, objDoc, mustSave

  '*********************************************************************
  ' Initialization/Termination
  '*********************************************************************

  'Initialize Class Members
  Private Sub Class_Initialize()
    strFile = ""
    mustSave = false
  End Sub

  'Terminate and unload all created objects
  Private Sub Class_Terminate()
    Set objDoc = Nothing
  End Sub

  '*********************************************************************
  ' Properties
  '*********************************************************************

  'Set XML File and objDoc
  Public Property Let File(str)
    Set objDoc = Server.CreateObject("Microsoft.XMLDOM")
    objDoc.async = False
    strFile = str
    objDoc.Load strFile
    if objDoc.parseError.errorCode <> 0 Then
        response.Write("Error de Lectura (Por favor, ponerse en contacto con el webmaster).<br />FilePos: " & objDoc.parseError.filepos & "<br /> Línea: " & objDoc.parseError.Line & "<br /> Causa: " & objDoc.parseError.reason & "<br /> Ocurrió en: " & objDoc.parseError.srcText & "<br /> Archivo: " & objDoc.parseError.URL)
        response.End()
    end if
  End Property

  'Get XML File
  Public Property Get File()
    File = strFile
  End Property

  'Set XML from a string
  Public Property Let fromStr(str)
    Set objDoc = Server.CreateObject("Microsoft.XMLDOM")
    objDoc.async = False
    
    objDoc.loadXML(strFile)
    if objDoc.parseError.errorCode <> 0 Then
        response.Write("Error de Lectura (Por favor, ponerse en contacto con el webmaster).<br />FilePos: " & objDoc.parseError.filepos & "<br /> Línea: " & objDoc.parseError.Line & "<br /> Causa: " & objDoc.parseError.reason & "<br /> Ocurrió en: " & objDoc.parseError.srcText & "<br /> Archivo: " & objDoc.parseError.URL)
        response.End()
    end if
  End Property

   ' return a string with the xml
  Public Property Get toString()
    toString = objDoc.xml
  End Property

  'save the XML document to a file or not
  Public Property Let SaveToFile(val)
    mustSave = val
  End Property
  
  '*********************************************************************
  ' Functions
  '*********************************************************************

  'Create Blank XML File, set current obj File to newly created file
  Public Function createFile(strPath, strRoot)
    Dim objFSO, objTextFile
    Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.CreateTextFile(strPath, True)
    objTextFile.WriteLine("<?xml version=""1.0""?>")
    objTextFile.WriteLine("<" & strRoot & "/>")
    objTextFile.Close
    Me.File = strPath
    Set objTextFile = Nothing
    Set objFSO = Nothing
  End Function

  'Get XML Field(s) based on XPath input from root node
  Public Function getField(strXPath)
    Dim objNodeList, arrResponse(), i
    Set objNodeList = objDoc.documentElement.selectNodes(strXPath)
    ReDim arrResponse(objNodeList.length)
    For i = 0 To objNodeList.length - 1
      arrResponse(i) = objNodeList.item(i).Text
    Next
    getField = arrResponse
  End Function

  'Update existing node(s) based on XPath specs
  Public Function updateField(strXPath, strData)
    Dim objField
    For Each objField In objDoc.documentElement.selectNodes(strXPath)
      objField.Text = strData
    Next
    if mustSave then objDoc.Save strFile
    Set objField = Nothing
    updateField = True
  End Function

  'Create node directly under root
  Public Function createRootChild(strNode)
    Dim objChild
    Set objChild = objDoc.createNode(1, strNode, "")
    objDoc.documentElement.appendChild(objChild)
    if mustSave then objDoc.Save strFile
    Set objChild = Nothing
  End Function

  'Create a child node under root node with attributes
  Public Function createRootNodeWAttr(strNode, attr, val)
    Dim objChild, objAttr
    Set objChild = objDoc.createNode(1, strNode, "")
    If IsArray(attr) And IsArray(val) Then
      If UBound(attr)-LBound(attr) <> UBound(val)-LBound(val) Then
        Exit Function
      Else
        Dim i
        For i = LBound(attr) To UBound(attr)
          Set objAttr = objDoc.createAttribute(attr(i))
          objChild.setAttribute attr(i), val(i)
        Next
      End If
    Else
      Set objAttr = objDoc.createAttribute(attr)
      objChild.setAttribute attr, val
    End If
    objDoc.documentElement.appendChild(objChild)
    if mustSave then objDoc.Save strFile
    Set objChild = Nothing
  End Function

  'Create a child node under the specified XPath Node
  Public Function createChildNode(strXPath, strNode)
    Dim objParent, objChild
    For Each objParent In objDoc.documentElement.selectNodes(strXPath)
      Set objChild = objDoc.createNode(1, strNode, "")
      objParent.appendChild(objChild)
    Next
    if mustSave then objDoc.Save strFile
    Set objParent = Nothing
    Set objChild = Nothing
  End Function

  'Create a child node(s) under the specified XPath Node with attributes
  Public Function createChildNodeWAttr(strXPath, strNode, attr, val)
    Dim objParent, objChild, objAttr
    For Each objParent In objDoc.documentElement.selectNodes(strXPath)
      Set objChild = objDoc.createNode(1, strNode, "")
      If IsArray(attr) And IsArray(val) Then
        If UBound(attr)-LBound(attr) <> UBound(val)-LBound(val) Then
          Exit Function
        Else
          Dim i
          For i = LBound(attr) To UBound(attr)
            Set objAttr = objDoc.createAttribute(attr(i))
            objChild.SetAttribute attr(i), val(i)
          Next
        End If
      Else
        Set objAttr = objDoc.createAttribute(attr)
        objChild.setAttribute attr, val
      End If
      objParent.appendChild(objChild)
    Next
    if mustSave then objDoc.Save strFile
    Set objParent = Nothing
    Set objChild = Nothing
  End Function

  'Delete the node specified by the XPath
  Public Function deleteNode(strXPath)
    Dim objOld
    For Each objOld In objDoc.documentElement.selectNodes(strXPath)
      objDoc.documentElement.removeChild objOld
    Next
    if mustSave then objDoc.Save strFile
    Set objOld = Nothing
  End Function
  
  ' Añadir un nodo CDATA
  public function addCDATANode(strXPath, strNodde)
    Dim objParent, objChild
    For Each objParent In objDoc.documentElement.selectNodes(strXPath)
      Set objChild = objDoc.createCDATASection(strNode)
      objParent.appendChild(objChild)
    Next
    if mustSave then objDoc.Save strFile
    Set objParent = Nothing
    Set objChild = Nothing
  end function
End Class

' USE:
'===============
'Dim objXML, strPath, str
'Set objXML = New clsXML

'strPath = Server.MapPath(".") & "\New.xml"

'objXML.createFile strPath, "Root"
'Or If using an existing XML file:
'objXML.File = "C:\File.xml"

'objXML.createRootChild "Images"

'Here only one attribute is added to the Images/Image Node
'objXML.createChildNodeWAttr "Images", "Image", "id", "1"
'objXML.updateField "Images//Image[@id=1]", "super.gif"
'objXML.createRootNodeWAttr "Jobs", Array("Size", "Length", "Width"), _
'    Array(24, 31, 30)
'objXML.createRootNodeWAttr "Jobs", Array("Size", "Length", "Width"), _
'    Array(24, 30, 29)
'objXML.createRootNodeWAttr "Jobs", Array("Size", "Length", "Width"), _
'    Array(24, 31, 85)

'Notice that all three job nodes have size 24, all of those 
'nodes will be updated
'objXML.updateField "Jobs[@Size=24]", "24's"

'Notice that only two nodes have the specified XPath, hence 
'only two new child nodes will be added
'objXML.createChildNodeWAttr "Jobs[@Size=24 and @Length=31]", "Specs", _
'    Array("Wood", "Metal", "Color"), _
'    Array("Cedar", "Aluminum", "Green")
'
'It is always important to iterate through all of the nodes
'returned by this XPath query.
'For Each str In objXML.getField("Jobs[@Size=24]")
'    Response.Write(str & "<br>")
'Next
'Set objXML = Nothing

'Response.Redirect "New.xml"

Usa XPath para realizar busqueda.



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
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 17:07.