2009-11-13 7 views
35

J'ai du XML que j'essaie de transformer en HTML en utilisant XSLT, mais je n'arrive pas à le faire fonctionner pour la vie de moi. Quelqu'un peut-il me dire ce que je fais mal?XSLT Transformer le XML avec des espaces de noms

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> 

Répondre

49

Vous devez fournir un préfixe d'espace de nom dans votre xslt pour les éléments que vous transformez. Pour une raison quelconque (au moins dans un analyseur Java JAXP), vous ne pouvez pas simplement déclarer un espace de noms par défaut. Cela a fonctionné pour moi:

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

Ceci attrapera tout ce qui est namespaced dans votre document XML.

+0

Cela a fonctionné pour moi aussi dans les tests (exécution de débogage XSLT dans Visual Studio 2008) – Murph

+0

Cela a fait l'affaire. J'avais essayé ceci avec la combinaison de exclude-result-prefixes = "t" parce que je pensais que cela me permettrait de ne pas avoir à virer sur t: avant chaque nœud. Y a-t-il un moyen d'éviter de faire cela? – Chris

+2

Je ne pense pas qu'il y en ait. –

-2

Comment exécuter-vous la transformation? Vous avez peut-être oublié de lier la feuille de style XSLT au document XML en utilisant:

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

au début du document XML. More explanation here.

+0

Je ne suis pas sûr de ce que vous entendez par là. Je ne suis en fait pas une transformation sur un fichier XML, mais plutôt la sérialisation d'un objet métier à l'aide de DataContractSerializer et en spécifiant l'espace de noms dans le DataContract de l'objet. – Chris

Questions connexes