Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XSLT Transform XML with Namespaces

I'm trying to transform some XML into HTML using XSLT.

Problem:

I can't get it to work. Can someone tell me what I'm doing wrong?

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> 
like image 864
Hungry Beast Avatar asked Nov 13 '09 17:11

Hungry Beast


1 Answers

You need to provide a namespace prefix in your xslt for the elements you are transforming. For some reason (at least in a Java JAXP parser) you can't simply declare a default namespace. This worked for me:

<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> 

This will catch everything that is namespaced in your XML doc.

like image 139
Andy Gherna Avatar answered Oct 05 '22 17:10

Andy Gherna