2009-11-13 2 views
35

У меня есть XML, который я пытаюсь преобразовать в HTML с помощью XSLT, но я не могу заставить его работать на всю жизнь. Может ли кто-нибудь сказать мне, что я делаю неправильно?XSLT Transform 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

Это сработало для меня тоже при тестировании (запуск XSLT-отладки в Visual Studio 2008) – 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

Смежные вопросы