2009-11-13 10 views
35

Mam trochę XML, który próbuję przekształcić w HTML przy użyciu XSLT, ale nie mogę go uruchomić do życia mnie. Czy ktoś może mi powiedzieć, co robię źle?XSLT Transform XML z przestrzeniami nazw

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> 

Odpowiedz

49

Musisz podać prefiks przestrzeni nazw w swoim xslt dla elementów, które transformujesz. Z jakiegoś powodu (przynajmniej w analizatorze Java JAXP) nie można po prostu zadeklarować domyślnej przestrzeni nazw. To zadziałało dla mnie:

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

Spowoduje to przechwycenie wszystkiego, co jest zapisane w dokumencie XML.

+0

To działało również dla mnie w testowaniu (uruchamianie debugowania XSLT w Visual Studio 2008) – Murph

+0

Zrobiłem to. Próbowałem tego z kombinacją exclude-result-prefixes = "t", ponieważ myślałem, że pozwoliłoby mi to nie musieć naśladować t: przed każdym węzłem. Czy istnieje sposób, aby tego uniknąć? – Chris

+2

Nie sądzę, że istnieje. –

-2

Jak wykonać transformację? Być może zapomniałeś połączyć arkusz stylów XSLT z dokumentem XML, używając:

<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?> 

na początku dokumentu XML. More explanation here.

+0

Nie jestem pewien, co przez to rozumiesz. Tak naprawdę nie robię transformacji na pliku XML, ale raczej serializuję obiekt biznesowy za pomocą DataContractSerializer i określając przestrzeń nazw w obiekcie DataContract obiektu. – Chris

Powiązane problemy