Скрипт xslt не работает, когда пространство имен объявлено в корневом узле - PullRequest
2 голосов
/ 11 февраля 2011

Код xslt ниже не работает для файла XML ниже.Однако, если я удаляю атрибуты пространства имен из узла «objects» в xml-файле, он работает как положено.Как я могу исправить код xslt, чтобы он работал, когда у меня есть атрибуты пространства имен в корневом узле?Первая публикация, извините, если форматирование испортилось.Спасибо

ФАЙЛ XML:

<objects xmlns="http://www.spicefactory.org/parsley"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<object id="models" type="blah">

</object>
</objects>

КОД XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="no"/>

<xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>
 <xsl:template match="object">
  <object new_attr="attr value ">
    <xsl:apply-templates select="node()|@*"/>
  </object>
 </xsl:template>
</xsl:stylesheet>

1 Ответ

11 голосов
/ 11 февраля 2011

Вам необходимо объявить и использовать то же пространство имен xml в xslt:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:sfp="http://www.spicefactory.org/parsley">

<xsl:output method="xml" indent="no"/>

<xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="sfp:object">
  <sfp:object new_attr="attr value ">
    <xsl:apply-templates select="node()|@*"/>
  </sfp:object>
 </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...