Criando e lendo um arquivo XML com o componente MSXML

O componente MSXML permite desenvolver aplicações baseadas em XML de alta-performance, com compatibilidade total ao XML padrão.

Neste código será ensinado como fazer a criação e a leitura de um arquivo XML utilizando o componente da Microsoft MSXML2.DOMDocument.4.0.

CRIAR ARQUIVO
<%
' Cria uma instância do controle
Set MsXml = Server.CreateObject("MSXML2.DOMDocument.4.0")
' Caminho onde o arquivo será salvo
str_Arquivo = Server.MapPath("arquivo.xml")

' Verifica se o arquivo existe
If MsXml.Load(str_Arquivo) Then
  Response.Write "O arquivo já existe!"
Else
  ' O método createElement adiciona os elementos
  Set root = MsXml.createElement("ComponentesASP")
  MsXml.appendChild(root)

  ' O método createProcessingInstruction possui 2 argumentos: o TARGET = "xml" e DATA = "version='1.0' encoding='ISO-8859-1'"
  Set inst = MsXml.createProcessingInstruction("xml", "version='1.0' encoding='ISO-8859-1'")
  MsXml.insertBefore inst, root

  ' Adiciona um comentário ao documento XML
  Set com = MsXml.createComment("Documento XML de exemplo")
  MsXml.insertBefore com, root

  Set onode = MsXml.createElement("ManipulaçãoXML")

  ' *****************************************************
  ' * Adiciona um ítem ao documento
  ' *****************************************************
  MsXml.documentElement.appendChild(onode)
  Set inode = MsXml.createElement("item")
  onode.appendChild(inode)

  Set child = MsXml.createElement("nome")
  child.Text = "MSXML - Microsoft"
  inode.appendChild(child)

  Set child = MsXml.createElement("versão")
  child.Text = "2.0 / 2.6 / 3.0 / 4.0"
  inode.appendChild(child)

  Set child = MsXml.createElement("fabricante")
  child.Text = "http://www.microsoft.com/"
  inode.appendChild(child)
  ' *****************************************************

  ' *****************************************************
  ' * Adiciona um ítem ao documento
  ' *****************************************************
  MsXml.documentElement.appendChild(onode)
  Set inode = MsXml.createElement("item")
  onode.appendChild(inode)

  Set child = MsXml.createElement("nome")
  child.Text = "ASP XML Parser - Chilkat Software"
  inode.appendChild(child)

  Set child = MsXml.createElement("versão")
  child.Text = "2.2.1"
  inode.appendChild(child)

  Set child = MsXml.createElement("fabricante")
  child.Text = "http://www.chilkatsoft.com/"
  inode.appendChild(child)
  ' *****************************************************

  ' Salva o arquivo no caminho especificado
  MsXml.save(str_Arquivo)

  ' Tira os objetos da memória
  Set child = Nothing
  Set inode = Nothing
  Set onode = Nothing
  Set com   = Nothing
  Set inst  = Nothing
  Set root  = Nothing

  Response.Write "Arquivo XML criado com sucesso!"
End If

' Tira o objeto da memória
Set MsXml = Nothing

%>







LER ARQUIVO
<%
' Cria uma instância do controle
Set MsXml = Server.CreateObject("MSXML2.DOMDocument.4.0")
' Indicamos que o download em segundo plano não é permitido
MsXml.async = False
' Carrega o documento XML
MsXml.load( Server.MapPath("arquivo.xml") )

' O método parseError contém informações sobre o último erro ocorrido
If MsXml.parseError <> 0 Then
  Response.Write "Código do erro: "& MsXml.parseError.ErrorCode &"<br />"
  Response.Write "Posição no arquivo: "& MsXml.parseError.FilePos &"<br />"
  Response.Write "Linha: "& MsXml.parseError.Line &"<br />"
  Response.Write "Posição na linha: "& MsXml.parseError.LinePos &"<br />"
  Response.Write "Descrição: "& MsXml.parseError.Reason &"<br />"
  Response.Write "Texto que causa o erro: "& MsXml.parseError.srcText &"<br />"
  Response.Write "Arquivo com problemas: " & MsXml.parseError.URL
Else
  ' A propriedade documentElement refere-se à raiz do documento
  Set raiz = MsXml.documentElement

  'Looping para percorrer todos os elementos filhos
  For i = 0 To raiz.childNodes.length -1
    ' A propriedade NodeName contém o nome do elemento e a propriedade childNodes contém a lista de elementos filhos
    Response.Write raiz.NodeName & "<br />"
    Response.Write raiz.childNodes.item(i).childNodes.item(0).text & "<br />"
    Response.Write raiz.childNodes.item(i).childNodes.item(1).text & "<br />"
  Next 
End If

' Tira o objeto da memória
Set MsXml = Nothing

%>

Nós queremos saber sua opinião aqui