none
Caracteres XML alterados. RRS feed

  • Pergunta

  • Bom dia pessoal.

    Salvo um conteúdo de formato xml em um arquivo XML.
    Dentro deste conteúdo, eu tenho caracteres '>', '<' e '&'.
    Quando abro o arquivo XML, esses caracteres aparecem ' &amp;', ' &gt;' e ' &lt;' respectivamente.

    Como faço para que esses caracteres sejam salvos no XML de modo que eu os veja perfeitamente e não alterados?

    Grato,
    Anderson
    segunda-feira, 9 de março de 2009 13:44

Respostas

  • Ola Anderson

    Pelo que eu entendi, voce precisa manter os dados. Por exemplo você tem um conteúdo xml dentro de um dos campos no xml e ele está fazendo as alterações correto?

    <?xml version="1.0" encoding="iso-8859-1"?> 
    <meuDocXml> 
        <meuCampoXml> 
            <conteudoXml> 
                Informação da notícia - Nonnn mommm no momm mom nonon mom omom omomom omononon 
            </conteudoXml> 
        </meuCampoXml> 
    </meuDocXml> 

    Você concorda comigo que, se ele não trocar os valores de <conteudoXml> para &lt;conteudoXml&gt; , quando você for ler o documento, querendo ou não este valor escrito no formato XML irá influenciar na sua instancia de XmlDocument (ou seja la qual for o seu xml reader?)

    É por isso que ele trata este campo assim, ele faz o Encode para este formato e, ao ler, ele faz o Decode.
    O que você pode fazer é utilizar a marcação CDATA. Utilizando o CDATA, você indica ao reader que ele não deve tentar interpretar o conteúdo e apenas fazer um bypass. Eu desconfio que fazendo desta forma ele irá ignorar a existencia dos caracteres < e > e sendo assim não irá fazer o Encode e Decode.

    Tenta isso. Não sei a sintaxe exatamente da marcação CDATA é algo assim<!CDATA[  seu conteudo ]>
    Atenciosamente

    Valdek Santos Santana Junior.
    segunda-feira, 9 de março de 2009 16:24
  • Anderson,

    Não faz o menor sentido o que você está querendo.

    No especificação do padrão XML é assim (ver site da W3C). Dentro do XML,vc tem que "encodar" todos os caracteres que sãu usados no próprio markup do xml (<, > e &). Se vc quer q ele "não converta", automaticametne vc vai gerar um XML que não é possível "parsear" e consequentemente deixa de ser um XML.

    A única alternativa pra isso, é usar um campo do tipo 'CDATA' dentro do XML. Provavelmente esses caracteres vão não-encodados nesse caso.

    Uma observação importante é que, mesmo que as informações estejam com &lt; &gt; dentro do XML se a pessoa que está "consumindo" o seu xml usar um parser tbém, ele automaticamente é traduzido. O problema é que ainda hoje existe gente que gera e consome xml na mão e não através de um parser.


    Abraço,

    Eric
    segunda-feira, 9 de março de 2009 16:27

Todas as Respostas

  • Desculpem me.
    Alterei a ordem dos caracteres.
    Corrigindo:
    "Dentro deste conteúdo, eu tenho caracteres '>', '<' e '&'.
    Quando abro o arquivo XML, esses caracteres aparecem ' &gt;' , ' &lt;' e '&amp;'  respectivamente. "

    Grato pela atenção,
    Anderson
    segunda-feira, 9 de março de 2009 14:07
  • Ola Anderson

    Pelo que eu entendi, voce precisa manter os dados. Por exemplo você tem um conteúdo xml dentro de um dos campos no xml e ele está fazendo as alterações correto?

    <?xml version="1.0" encoding="iso-8859-1"?> 
    <meuDocXml> 
        <meuCampoXml> 
            <conteudoXml> 
                Informação da notícia - Nonnn mommm no momm mom nonon mom omom omomom omononon 
            </conteudoXml> 
        </meuCampoXml> 
    </meuDocXml> 

    Você concorda comigo que, se ele não trocar os valores de <conteudoXml> para &lt;conteudoXml&gt; , quando você for ler o documento, querendo ou não este valor escrito no formato XML irá influenciar na sua instancia de XmlDocument (ou seja la qual for o seu xml reader?)

    É por isso que ele trata este campo assim, ele faz o Encode para este formato e, ao ler, ele faz o Decode.
    O que você pode fazer é utilizar a marcação CDATA. Utilizando o CDATA, você indica ao reader que ele não deve tentar interpretar o conteúdo e apenas fazer um bypass. Eu desconfio que fazendo desta forma ele irá ignorar a existencia dos caracteres < e > e sendo assim não irá fazer o Encode e Decode.

    Tenta isso. Não sei a sintaxe exatamente da marcação CDATA é algo assim<!CDATA[  seu conteudo ]>
    Atenciosamente

    Valdek Santos Santana Junior.
    segunda-feira, 9 de março de 2009 16:24
  • Anderson,

    Não faz o menor sentido o que você está querendo.

    No especificação do padrão XML é assim (ver site da W3C). Dentro do XML,vc tem que "encodar" todos os caracteres que sãu usados no próprio markup do xml (<, > e &). Se vc quer q ele "não converta", automaticametne vc vai gerar um XML que não é possível "parsear" e consequentemente deixa de ser um XML.

    A única alternativa pra isso, é usar um campo do tipo 'CDATA' dentro do XML. Provavelmente esses caracteres vão não-encodados nesse caso.

    Uma observação importante é que, mesmo que as informações estejam com &lt; &gt; dentro do XML se a pessoa que está "consumindo" o seu xml usar um parser tbém, ele automaticamente é traduzido. O problema é que ainda hoje existe gente que gera e consome xml na mão e não através de um parser.


    Abraço,

    Eric
    segunda-feira, 9 de março de 2009 16:27
  • Exatamente, infelizmente hoje em dia existe muitas pessoas que ainda geram o conteúdo XML utilizando um StringBuilder da vida e por consequencia criam conteúdos xml's não "parseáveis" ...
    Valdek Santos Santana Junior.
    segunda-feira, 9 de março de 2009 16:37