Olá amigos,

andei meio sumido, pois estou muito atarefado com novos projetos e novas ferramentas, e não tive oportunidade de escrever o artigo da semana passada, mas estamos de volta. Essa semana quero mostrar como gerar um XML de uma forma bem simples, e gravar o resultado em um arquivo, ou mostrar no próprio browser.

O código abaixo foi feito em .NET 2.0

Pra começar, vamos criar um XmlWriterSettings para configurar nosso XML:

Dim settings As New XmlWriterSettings

settings.Indent = True

settings.IndentChars = " "

settings.NewLineOnAttributes = False

settings.OmitXmlDeclaration = False


Agora criamos um StringBuilder e um XMLWriter:

Dim sb As New StringBuilder

Dim tw As XmlWriter = XmlWriter.Create(sb, settings)

Em seguida, vamos gravar os dados:

  

With tw

.WriteStartDocument()

.WriteStartElement("produtos")

.WriteStartElement("produto")

.WriteAttributeString("id", "1")

.WriteElementString("descricao", "Papel sulfite")

.WriteElementString("categoria", "Papeis")

.WriteElementString("preco", "199.99")

.WriteElementString("unidade", "pct")

.WriteElementString("quantidade", "1")

.WriteStartElement("estoque")

.WriteElementString("unidade", "pct")

.WriteStartElement("loja")

.WriteAttributeString("nome", "matriz")

.WriteString("10")

.WriteEndElement() 'loja

.WriteElementString("almoxarifado", "18")

.WriteEndElement() 'estoque

.WriteEndElement() 'produto

.WriteStartElement("produto")

.WriteAttributeString("id", "2")

.WriteElementString("descricao", "Etiqueta adesiv")

.WriteElementString("categoria", "Etiquetas")

.WriteElementString("preco", "19.99")

.WriteElementString("unidade", "pct")

.WriteElementString("quantidade", "1")

.WriteStartElement("estoque")

.WriteElementString("unidade", "pct")

.WriteStartElement("loja")

.WriteAttributeString("nome", "filial 1")

.WriteString("0")

.WriteEndElement() 'loja

.WriteElementString("almoxarifado", "5")

.WriteEndElement() 'estoque

.WriteEndElement() 'produto

.WriteEndElement() 'produtos

.WriteEndDocument()

End With

tw.Flush()

tw.Close()

por fim, vamos retornar o conteúdo desse xml no browser, para isso, basta mudar o contentType da página para text/xml:

Response.ContentType = "text/xml"

Response.Write(sb.ToString)

Response.End()

O resultado é o seguinte:

 

- <produtos>
- <produto id="1">
  <descricao>Papel sulfite</descricao>
  <categoria>Papeis</categoria>
  <preco>199.99</preco>
  <unidade>pct</unidade>
  <quantidade>1</quantidade>
- <estoque>
  <unidade>pct</unidade>
  <loja nome="matriz">10</loja>
  <almoxarifado>18</almoxarifado>
  </estoque>
  </produto>
- <produto id="2">
  <descricao>Etiqueta adesiv</descricao>
  <categoria>Etiquetas</categoria>
  <preco>19.99</preco>
  <unidade>pct</unidade>
  <quantidade>1</quantidade>
- <estoque>
  <unidade>pct</unidade>
  <loja nome="filial 1">0</loja>
  <almoxarifado>5</almoxarifado>
  </estoque>
  </produto>
  </produtos>

Bem, agora para salvar esse XML num arquivo é muito fácil, basta alterar o inicio do nosso código, no lugar de colocar o StringBuilder como saida pro XML é só colocar o path do arquivo, se ele não existir, será criado um novo:

Dim tw As XmlWriter = XmlWriter.Create(MapPath("~/") & "arquivo.xml", settings)

 
pronto, o restante do código é exatamente igual.
Espero que voces tenham aproveitado bastante.
até a próxima