2009-11-13 14 views
35

XMLにはXSLTを使用してHTMLに変換しようとしていますが、私の生活の中ではうまく機能しません。誰かが私が間違っていることを教えてもらえますか?XSLT名前空間を持つXMLを変換する

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> 

答えて

49

変換する要素のxsltに名前空間接頭辞を付ける必要があります。何らかの理由で(少なくともJava JAXPパーサーでは)、単にデフォルトの名前空間を宣言することはできません。これは私のために働いた:

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

これは、あなたのXML文書で名前空間のすべてをキャッチします。

+0

これは私のためにVisual Studio 2008でXSLTデバッグを実行してテストしました – Murph

+0

これはトリックでした。私はexclude-result-prefixes = "t"の組み合わせでこれを試していました。なぜなら、各ノードの前にtを置く必要がないと思ったからです。これをやることを避ける方法はありますか? – Chris

+2

私はそこにいるとは思わない。 –

-2

どのようにして変換を実行しますか? XSLTスタイルシートをXML文書にリンクするのを忘れていたかもしれません。

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

XMLドキュメントの冒頭にあります。 More explanation here

+0

あなたがこれによって何を意味するか分かりません。私は実際にはXMLファイルの変換を行うのではなく、むしろDataContractSerializerを使用してビジネスオブジェクトを直列化し、オブジェクトのDataContractに名前空間を指定しています。 – Chris

関連する問題