Problemas com caracteres em XML???  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
phstc
JavaGuru

Membro desde: 13/04/2004 12:22:22
Mensagens: 200
Localização: São Paulo, SP
Offline

Problemas com caracteres em XML???

Tenho um componente simples para montagem de um XML, no qual uso constatemente para chamar alguns serviços de minha aplicação.



Meu problema é que quando eu envio o parametro xmlIn com algum caractere especial gera erro no xml ao passar para o serviço.

Exemplo

Devolve:


Isso fica como xml mal formatada, pois o correto é seria:



Alguem sabe como posso sanar este problema dentro do metódo MontarXmlIn, afim de gerar menor impacto para minha aplicação???

Será que se eu chamar o metódo enconde dentro java.net.URLEncoder, no xmlIn resolve meu problema? Ou pode implicar em alguma outra coisa?


Grato,
Pablo
[Email]
EddiE
Virtual Machine Man

Membro desde: 31/08/2002 09:05:07
Mensagens: 647
Localização: São Paulo - SP
Offline

já tive o mesmo problema e postei uma ajuda http://www.guj.com.br/forum/viewtopic.php?t=15076&highlight=fop
EddiE
Virtual Machine Man

Membro desde: 31/08/2002 09:05:07
Mensagens: 647
Localização: São Paulo - SP
Offline

para ir direto... http://www.w3.org/TR/2000/REC-xml-20001006#sec-references
Diogenes
Virtual Machine Man
[Avatar]

Membro desde: 17/07/2003 14:08:01
Mensagens: 646
Localização: Belo Horizonte
Offline

Serah q colocar o conteudo em um bloco CDATA não resolveria?


Diogenes

"É possível resistir a invasão de exércitos, mas não a invasão de idéias." - (Victor Hugo)


[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

É por isso que a gente tem de usar aquelas bibliotecas como a JDOM. Para fazer coisas fáceis um simples StringBuffer.append já é suficiente, mas como de costume as coisas acabam sendo mais bem-sucedidas que a gente gostaria, e no fim das contas é necessário escrever um código tão ou mais complicado que os das bibliotecas que, por comodidade, a gente acaba não usando.
No seu caso já seria necessário escrever algo como:
xmlIn.replaceAll("&", "&amp;").replaceAll("\\''", "&apos;").replaceAll("\"","&quot;").replaceAll("<","&lt;").replaceAll(">","&gt;") ou coisa que o valha, em vez de simplesmente xmlIn.
[WWW]
TaQ
JavaChild
[Avatar]

Membro desde: 18/07/2003 10:04:52
Mensagens: 124
Localização: São José do Rio Preto, SP
Offline

O caracter & define o começo de uma entidade XML. Como ele não achou mais nada, dá erro. Você tem que especificar ele com &.

Eustáquio "TaQ" Rangel
http://beam.to/taq
Usuário registrado Linux 224050
[Email] [WWW] [Yahoo!] [ICQ]
phstc
JavaGuru

Membro desde: 13/04/2004 12:22:22
Mensagens: 200
Localização: São Paulo, SP
Offline

thingol wrote:É por isso que a gente tem de usar aquelas bibliotecas como a JDOM. Para fazer coisas fáceis um simples StringBuffer.append já é suficiente, mas como de costume as coisas acabam sendo mais bem-sucedidas que a gente gostaria, e no fim das contas é necessário escrever um código tão ou mais complicado que os das bibliotecas que, por comodidade, a gente acaba não usando.
No seu caso já seria necessário escrever algo como:
xmlIn.replaceAll("&", "&amp;").replaceAll("'''", "&apos;").replaceAll(""","&quot;").replaceAll("<","&lt;").replaceAll(">","&gt;") ou coisa que o valha, em vez de simplesmente xmlIn.



São somente estes replaces que devo fazer, não existe mais nenhum caracter especial?
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Hum, na verdade só lendo a especificação do XML em http://w3.org para ter certeza
Acho que são pelo menos esses.
& -> &amp;
" -> &quot;
' -> &apos;
< -> &lt;
> -> &gt;

Mas de qualquer maneira, por que é que você não usa o JDOM? É fácil de usar e parece que é bem rápido.

Se você é chegado em ler especificações, aqui está a definição oficial:

http://w3.org/TR/2004/REC-xml-20040204/

2.4 Character Data and Markup
Text consists of intermingled character data and markup. [Definition: Markup takes the form of start-tags, end-tags, empty-element tags, entity references, character references, comments, CDATA section delimiters, document type declarations, processing instructions, XML declarations, text declarations, and any white space that is at the top level of the document entity (that is, outside the document element and not inside any other markup).]

[Definition: All text that is not markup constitutes the character data of the document.]

The ampersand character (& and the left angle bracket (< MUST NOT appear in their literal form, except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. If they are needed elsewhere, they MUST be escaped using either numeric character references or the strings "&amp;" and "&lt;" respectively. The right angle bracket (> MAY be represented using the string "&gt;", and MUST, for compatibility, be escaped using either "&gt;" or a character reference when it appears in the string "]]>" in content, when that string is not marking the end of a CDATA section.

In the content of elements, character data is any string of characters which does not contain the start-delimiter of any markup and does not include the CDATA-section-close delimiter, "]]>". In a CDATA section, character data is any string of characters not including the CDATA-section-close delimiter, "]]>".

To allow attribute values to contain both single and double quotes, the apostrophe or single-quote character (') MAY be represented as "&apos;", and the double-quote character (") as "&quot;".
[WWW]
TaQ
JavaChild
[Avatar]

Membro desde: 18/07/2003 10:04:52
Mensagens: 124
Localização: São José do Rio Preto, SP
Offline

Só para lembrar: mesmo que você consiga contornar usando replace's na string ANTES de a processar, o seu arquivo não é considerado um arquivo XML válido se você o deixa com & somente.

Eustáquio "TaQ" Rangel
http://beam.to/taq
Usuário registrado Linux 224050
[Email] [WWW] [Yahoo!] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team