E ai moçada,
Tenho que transformar um XML com um XSL, mas to apanhando do namespace.
O XML está assim:
[code]<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="xxx.xsl"?>
Praça de Testes
<cota_p1>610.0</cota_p1>
<cota_p2>597.0</cota_p2>
[/code]
E o XSL assim:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="PerformanceDistritoRetorno/Praca"/>
<xsl:for-each select="PerformanceDistritoRetorno/EstruturaPerformance">
<xsl:value-of select="cota_p1"/> - <xsl:value-of select="cota_p2"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Acontece que por causa do namespace padrão do XML, nenhum valor é exibido depois da transformação. Porém, se eu tiro a definição do namespace do XML, tudo funciona.
Como não sou eu que gero o XML, eu gostaria de colocar o XSL para entender o namespace informado no XML.
Tentei algumas formas, porém não deu. Alguem pode ajudar?
vc ta validando o .xml com um schema ou dtd em algum momento??
O XML Beans gera as classes dele baseado num XSD que “desenha” a estrutura, porém não ocorre uma validação depois não.
Esse XML é gerado pela classe (que foi gerada pelo XML Bean).
ps: Se eu adiciono um prefixo no namespace do XML, também funciona.
Exemplo:
<PerformanceDistritoRetorno xmlns:mdc=“http://report.preformance.mdc.xxx.com.br” … >
Teste assim:
<EstruturaPerformance
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="rep:EstruturaPerformance"
xmlns:rep="http://report.preformance.mdc.xxx.com.br">
nao ha erro em colocar um prefixo, mas na verdade se quise validar o documento xml com xsd, o prefixo deve estar tambem no inicio de cada tag em baixo do root
-
Acontece que ele nem lê o dado “Praca”. O problema é outro.
Mas eu não “deveria” mudar o XML, já que ele já vem gerado para mim, por outro componente externo. Quero adequar o XSL para o XML recebido.
Resolvi. Na verdade descobri que o XML estava vindo diferente.
Ele vem assim:
<?xml version="1.0" encoding="UTF-8"?>
<rep:PerformanceDistritoRetorno xmlns:rep="http://report.preformance.mdc.abril.com.br">
<rep:Praca>São Paulo</rep:Praca>
<rep:EstruturaPerformance xsi:type="rep:EstruturaPerformance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<rep:cota_p1>610.0</rep:cota_p1>
<rep:cota_p2>597.0</rep:cota_p2>
</rep:EstruturaPerformance>
</rep:PerformanceDistritoRetorno>
e no XSL eu fiz isso:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rep="http://report.preformance.mdc.abril.com.br">
<xsl:template match="/">
<xsl:value-of select="pre:PerformanceDistritoRetorno/pre:Praca"/>
<xsl:for-each select="rep:PerformanceDistritoRetorno/rep:EstruturaPerformance">
<xsl:value-of select="rep:cota_p1"/>
<xsl:value-of select="rep:cota_p2"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>