проблема с xslt и пространствами имен - PullRequest
1 голос
/ 25 августа 2009

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

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

Работает нормально, и я получаю_ "ID:3540"

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

Ответы [ 3 ]

2 голосов
/ 25 августа 2009

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

<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 в выводе.

1 голос
/ 25 августа 2009

Вам нужно добавить пространство имен в ваш 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>
0 голосов
/ 25 августа 2009

Попробуйте добавить 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...