Validar caracteres especiais HTML com XML

4 respostas
M

Bom dia, tenho uma aplicação que converte uma página HTML para XHTML para depois validá-la contra um XSD.
Meu problema aparece quando o código HTML possui caracteres especiais (#aacute;, #acirc;, #ccedil;), que o XSD valida, pois isso não pertence à sintaxe dele.

Por exemplo, se eu tentar validar o seguinte trecho de código:

<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
      <p>A imagem est#aacute; sem descri#ccedil;&atilde;o</p>
      
      <img src="carro.jpg"></img>

  </body>
</html>

Recebo a seguinte mensagem:

org.xml.sax.SAXParseException: The entity “aacute” was referenced, but not declared.

Alguém pode me ajudar?

OBS: Substitui o & por #, para que aparecesse o código como ele está aqui.

4 Respostas

R

Você vai ter de filtrar o conteúdo da página HTML antes de convertê-lo para XHTML, substituindo as seqüências de escape pelos caracteres adequados. As seqüências de escape são como segue:

#lt;

#gt;

#amp;

#quot;

#nbsp;

#Ccedil;

#ccedil;

#Ntilde;

#ntilde;

#THORN;

#thorn;

#Yacute;

#yacute;

#yuml;

#szlig;

#AElig;

#Aacute;

#Acirc;

#Agrave;

#Aring;

#Atilde;

#Auml;

#aelig;

#aacute;

#acirc;

#agrave;

#aring;

#atilde;

#auml;

#ETH;

#Eacute;

#Ecirc;

#Egrave;

#Euml;

#eth;

#eacute;

#ecirc;

#egrave;

#euml;

#Iacute;

#Icirc;

#Igrave;

#Iuml;

#iacute;

#icirc;

#igrave;

#iuml;

#Oacute;

#Ocirc;

#Ograve;

#Oslash;

#Otilde;

#Ouml;

#oacute;

#ocirc;

#ograve;

#oslash;

#otilde;

#ouml;

#Uacute;

#Ucirc;

#Ugrave;

#Uuml;

#uacute;

#ucirc;

#ugrave;

#uuml;

#reg;

#plusmn;

#micro;

#para;

#middot;

#cent;

#pound;

#yen;

#frac14;

#frac12;

#frac34;

#sup1;

#sup2;

#sup3;

#iquest;

#deg;

#brvbar;

#sect;

#laquo;

#raquo;

(Também substituí o & por #, como você fez na mensagem inicial.)

L

quem sabe quando você converte o outro arquivo não está definido como UTF-8 ou vice-versa.

como você está fazendo a conversão?

M

To utlizando o jTidy para fazer a conversão HTML -> XHTML.
Eu poderia configurá-lo para fazer a conversão correta? Ou seja, setar para UTF-8 ou outro correto?

M

Consegui resolver aqui galera.
Encontrei 2 API’s que fazem isso:

http://static.springsource.org/spring/docs/1.2.x/api/org/springframework/web/util/HtmlUtils.html

http://commons.apache.org/lang/api/org/apache/commons/lang/StringEscapeUtils.html

Implementei usando a segunda e funcionou blz.
Exemplo de implementação da 2ª API: http://preclog.blogspot.com/2008/09/trocando-caracteres-especiais-no-java.html

vlw

Criado 26 de março de 2010
Ultima resposta 26 de mar. de 2010
Respostas 4
Participantes 3