Problemas para fazer parser XML para HTML usando XALAN

5 respostas
java_child

Bom dia pessoal! Sou nova por aqui, e este é meu primeiro tópico.
A situação é a seguinte: Estou fazendo um parser para um determinado tipo de documento XML, utilizando XALAN. Já está tudo pronto, os códigos, o xsl e tal. Mas aí o que acontece: Só é processada até antes de chegar na primeira instrução xsl, ou seja, apenas o cabeçalho aparece no html gerado. O curioso é que se eu substituir a barrinha do template match por qualquer outra palavra, ele carrega os dados do xml e despreza toda e qualquer formatação contida no xsl. Será que alguém poderia me ajudar?

Meu código:

Source xmlSource = new StreamSource(new File(sPathDocumento));
Source xslSource = new StreamSource(new File(sPathEstilo));
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(xslSource);
transformer.transform(xmlSource, new StreamResult(out));

Meu xsl:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1"/>
<xsl:template match="/">
  <html>
<head>
<style type="text/css">
 // Aqui vai um monte de formatação css
</style>
</head>
<body>

<div class="margemGeral">
  <A><xsl:attribute name="name">topo</xsl:attribute></A>     
  <div class="header2"> <h>Resumo das ocorrências</h> </div>

   // A partir daqui, nada mais é processado
    <xsl:for-each select="blabla>

Obrigada gente! Espero que alguém consiga me ajudar!! Estou há dias tentando de tudo, sem sucesso :frowning:

5 Respostas

O

Posta o .xsl inteiro e um exemplo de XML de entrada e um HTML de saida esperado.

java_child

Não postei o xml todo porque contém informações sigilosas.

XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1"/>
<xsl:template match="/">
  <html>
<head>
<style type="text/css">
.header1
{
background-color: #CCCCCC;
text-align: center;
font-weight: bold
}
.header2
{
background-color: #E1EBF4;
text-align: center
}
h
{
color: #000000
}
.linha1
{
color: #213D8A;
height: 2px
}
.linha2
{
color: #000000;
height: 4px
}
.linha3
{
background-color: #FFF9BA;
}
.texto1
{
position:relative;
left:40%
}
td 
{
vertical-align:top
}
.paragrafo1
{
position:relative;
left:10px
}
.paragrafo2
{
position:relative;
left:20px
}
.paragrafo3
{
position:relative;
left:40px
}
.paragrafo4
{
position:relative;
left:20px
}
.paragrafo5
{
position:relative;
left:20px
}
.margemGeral
{
margin: 3% 10% 3% 10%
}
</style>
</head>
<body>
<div class="margemGeral">
  <A><xsl:attribute name="name">topo</xsl:attribute></A>
  <div class="header2"> <h>Resumo das ocorrências</h> </div>
    <xsl:for-each select="LOG">
      <div class="paragrafo1">
	  <table>
	    <xsl:for-each select="OCORRENCIA-LOG">
	      <tr>
		  <td width="30%">
	      <xsl:for-each select="MENSAGEM">
      			<xsl:choose>
          				<xsl:when test="@SEVERIDADE-MENSAGEM[.='ERRO']">
            				<br /><font color="#FF0000"><b>
							[Mensagem de erro]: <xsl:value-of select="@CODIGO-MENSAGEM"/> -
								<xsl:value-of select="TEXTO-MENSAGEM"/></b></font><br />						
     			     		</xsl:when> 
	 		   		<xsl:when test="@SEVERIDADE-MENSAGEM[.='ADVERTENCIA']">            
						<br /><font color="#FF9C00"><b>
							[Atenção]:</b></font> <xsl:value-of select="@CODIGO-MENSAGEM"/> -
								<xsl:value-of select="TEXTO-MENSAGEM"/><br />						
     	     				</xsl:when>         
      	    			<xsl:when test="@SEVERIDADE-MENSAGEM[.='INFORMACAO']">
           			 		<br /><font color="#319C31"><b>
							[Informação]:</b></font> <xsl:value-of select="@CODIGO-MENSAGEM"/> -
								<xsl:value-of select="TEXTO-MENSAGEM"/><br />						
          				</xsl:when>
          				<xsl:otherwise>
						<br /><xsl:value-of select="@CODIGO-MENSAGEM"/> -
           			 			<xsl:value-of select="TEXTO-MENSAGEM"/><br />						
        	  			</xsl:otherwise>
        			</xsl:choose>
				<xsl:if test="@INFORMACOES-ADICIONAIS">
					<b>Informações adicionais: </b><xsl:value-of select="@INFORMACOES-ADICIONAIS"/><br />
				</xsl:if>
        <br /><br />	
	</xsl:for-each>	
	</div>
	<hr class="linha2" />
      </xsl:for-each>
     </div>
    </xsl:for-each>   
  </div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XML:
<LOG xmlns:x0="http://www.w3.org/2001/XMLSchema">
- <OCORRENCIA-LOG>
- <MENSAGEM CODIGO-MENSAGEM="63" SEVERIDADE-MENSAGEM="INFORMACAO">
  <TEXTO-MENSAGEM>Consistido com sucesso</TEXTO-MENSAGEM> 
  </MENSAGEM>

Ele parece não estar encontrando o elemento root. Mas fazendo direto pelo browser ele funciona sem problemas.

O

No xsl tem a mais e

, e
que não estão sendo fechados. Para que um xsl funcione o HTML gerado tem que ser “well-formed”.

O seu programa não está retornando nenhum exception?

java_child

Olá oyama!!
Obrigada pela ajuda, mas as minhas tags estão todas fechadas corretamente. Eu devo estar colocando alguma coisa errada, porque eu executei a rotina uitlizando outro xml e xls e funcionou corretamente. E este aqui funciona quando o parser é feito diretamente pelo browser.

java_child

Já consegui resolver o problema! Era tudo culpa de um namespace errado que eu estava colocando no xml!! Obrigada pela ajuda, oyama! :lol:

Criado 16 de novembro de 2006
Ultima resposta 17 de nov. de 2006
Respostas 5
Participantes 2