2009-08-25 3 views
1

У меня есть класс C#, который сериализуется так:проблема с XSLT и пространств имен

<oadResults 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns="http://www.tyr.org.uk/standards" 
> 
    <Link>http://www.tyr.org.uk//290/Data.zip</Link> 
    <ID>3540</ID> 
</oadResults> 

И у меня есть XSLT-файл:

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> 
    <xsl:template match="/"> 
    ID <xsl:value-of select="ID"/> </xsl:template> 
</xsl:stylesheet> 

преобразование не работает, результат: "ID"

Но если удалить это из файла XML:

xmlns="http://www.tyr.org.uk/standards" 

Он отлично работает, и я get_ "ID:3540"

Можете ли вы сказать мне, как я могу исправить эту проблему изменяя файл XSL, а не XML?

ответ

0

Попробуйте добавить xmlns="http://www.tyr.org.uk/standards" в узел xsl:stylesheet узла XSLT.

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns="http://www.tyr.org.uk/standards" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    ID <xsl:value-of select="ID"/> </xsl:template> 
</xsl:stylesheet> 

В качестве альтернативы, вы можете дать http://www.tyr.org.uk/standards пространства имен псевдонима в XSLT-документе, поэтому он будет выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:bob="http://www.tyr.org.uk/standards" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    ID <xsl:value-of select="bob:ID"/> </xsl:template> 
</xsl:stylesheet> 

Вы можете найти более подробную информацию о Пространстве имен XML в http://www.w3.org/TR/REC-xml-names/

1

Вам нужно будет добавить пространство имен в XSLT.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:t="http://www.tyr.org.uk/standards"> 
    <xsl:template match="/"> 
     ID <xsl:value-of select="t:ID"/> 
    </xsl:template> 
</xsl:stylesheet> 
2

Я хотел бы предложить:

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:tyr="http://www.tyr.org.uk/standards" 
    exclude-result-prefixes="tyr" 
> 
    <xsl:template match="/tyr:oadResults"> 
    <xsl:text>ID </xsl:text> 
    <xsl:value-of select="tyr:ID"/> 
    <xsl:text>&#10;</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

Обратите внимание на <xsl:text> элементы. Они помогают сохранить код XSL в чистоте (с точки зрения правильного отступов), обеспечивая при этом предсказуемый формат вывода.

exclude-result-prefixes предотвращает появление в представлении объявления пространства tyr.

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