XSLT Transform XML con espacios de nombres
namespaces datacontractserializer (2)
Tengo un XML que estoy intentando transformar a HTML usando XSLT, pero no puedo hacerlo funcionar por mi vida. ¿Puede alguien decirme qué estoy haciendo mal?
XML
<ArrayOfBrokerage xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.test.com/">
<Brokerage>
<BrokerageID>91</BrokerageID>
<LastYodleeUpdate>0001-01-01T00:00:00</LastYodleeUpdate>
<Name>E*TRADE</Name>
<Validation i:nil="true" />
<Username>PersonalTradingTesting</Username>
</Brokerage>
</ArrayOfBrokerage>
XSLT
<xsl:stylesheet version="1.0" xmlns="http://www.test.com/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xslFormatting="urn:xslFormatting">
<xsl:output method="html" indent="no"/>
<xsl:template match="/ArrayOfBrokerage">
<xsl:for-each select="Brokerage">
Test
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
¿Cómo ejecutas la transformación? Tal vez se olvidó de vincular la hoja de estilo XSLT a un documento XML usando:
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
al comienzo del documento XML. Más explicación aquí .
Debe proporcionar un prefijo de espacio de nombres en su xslt para los elementos que está transformando. Por alguna razón (al menos en un analizador JAXP de Java) no puede simplemente declarar un espacio de nombres predeterminado. Esto funcionó para mí:
<xsl:stylesheet version="1.0" xmlns:t="http://www.test.com/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xslFormatting="urn:xslFormatting">
<xsl:output method="html" indent="no"/>
<xsl:template match="/t:ArrayOfBrokerage">
<xsl:for-each select="t:Brokerage">
Test
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Esto capturará todo lo que está espaciado de nombres en su documento XML.