Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xikoo

[Resolvido] Encodar XML

Recommended Posts

Um pequeno exemplo:

 

<%
str_saida = "<?xml version=""1.0"" encoding=""UTF-8"" ?>"
str_saida = str_saida & "<classificacao area=""classificacao"">" 
str_saida = str_saida & "</classificacao>"

set fs = Server.CreateObject("Scripting.FileSystemObject")
set tfile = fs.CreateTextFile("c:\file.xml")
tfile.WriteLine(str_saida)
%>

Tenho que colocar um xml nesse formato, com encoding UTF-8 já que irei usá-lo num mac para desenvolvimento de aplicações para iPhone. Mas ele simplesmente rejeita esse xml por causa do ecoding dele.

 

Se eu pegar um xml que é aceitável e colocar no notepad++ vai aparecer lá em baixo "UNIX" "ANSI as UTF-8"

 

Sendo o que é gerado pela página "Dos\Windows" "ANSI"

 

Tenho certeza que esse é o problema pois já peguei o conteúdo gerado pela página e colei dentro do outro arquivo que é aceitável e ele leu.

 

Como faço para gerar um XML assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma pesquisada no forum k existem varios ótimos exemplos de como criar e manipular XML

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já havia pesquisado antes e não achei nada sobre :(

 

Falando nisso depois vou contribuir com alguns scripts que utilizo aqui no dia-a-dia

Compartilhar este post


Link para o post
Compartilhar em outros sites

se kiser me enviar em posso disponibilizar no lab. de script...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

já li todos os capítulos disso e não tem nada sobre como encodar o arquivo

 

Pq se você reparar eu to escrevendo ele com o encoding ali especificado, nesse link ele só explica a codificacao ISO, UTF e etc.

 

Eu crio o arquivo pela página asp que pode ser lido por qualquer browser e etc, menos pelo mac/iphone, o arquivo na criação foi encodado assim, ANSI.

 

Imagem Postada

 

Imagem Postada

 

Já o segundo exemplo é um arquivo q eu peguei do próprio iphone de exemplo e colei o mesmo conteúdo do arquivo que é gerado e ele consegue ler pq ele foi criado daquela forma. Eu queria saber se tem como fazer isso quando estou gerando ele pela página asp pq só assim ele lê :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode grava-lo assim

Set inst = MsXml.createProcessingInstruction("xml", "version='1.0' encoding='ISO-8859-1'")

onde no encoding você pode seta-lo para ISO-8859-1 ou UTF-8

e depois na pagina k usara

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu insiro essa linha em qual trecho do código?

 

Set inst = MsXml.createProcessingInstruction("xml", "version='1.0' encoding='ISO-8859-1'")

Compartilhar este post


Link para o post
Compartilhar em outros sites

achei esse script aqui xanburzum, vou tentar com ele, espero que funcione

 

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

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

muito bem

Compartilhar este post


Link para o post
Compartilhar em outros sites

funcionou com esse método, só fiz as modificações usando MSXML2.DOMdocument.3.0 pq nao tinha o 4.0 no servidor e usando o encoding='UTF-8' na criação do arquivo, o que é bem diferente de escrever isso nele :)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Set inst = MsXml.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.