2013-09-05 3 views
0

A.xsl импортирует B.xsl, который содержит функцию, используемую в A.xsl. A.xsl содержит шаблон идентичности. Функция B.xsl должна применять правила шаблона к переменной; однако шаблон идентичности в A.xsl переопределяет их.xsl: apply-import для переменной?

Моя мысль была xsl:apply-imports переменной в B, но, в отличие от xsl:apply-templates, нет никакого способа сделать select=, чтобы указать ее на переменную. Исходные функции не могут быть заменены правилами шаблонов. Есть ли способ сделать это без xsl:include -ing B.xsl?

A.xsl:

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:my="http://me" 
    version="2.0"> 

    <xsl:import href="B.xsl"/> 

    <xsl:template match="X"> 
     <xsl:sequence select="my:do-stuff(.)"/> 
    </xsl:template> 

    <xsl:template match="@*|node()" mode="#all" priority="-1"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" mode="#current"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

B.xsl:

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:my="http://me" 
    version="2.0"> 

    <xsl:template match="X" mode="cleanup"> 
     <clean><xsl:apply-templates/></clean> 
    </xsl:template> 

    <xsl:function name="my:do-other-stuff"> 
     <xsl:param name="x" as="element(X)"/> 
     ... 
    </xsl:function> 

    <xsl:function name="my:do-stuff"> 
     <xsl:param name="x" as="element(X)"/>    
     <xsl:variable name="x-updated" select="my:do-other-stuff($x)"/> 
     <xsl:apply-templates select="$x-updated" mode="cleanup"/> 
    </xsl:function> 

</xsl:stylesheet> 

ответ

0

Одним из вариантов является предотвращение шаблон идентичности переопределение путем изменения mode="#all" в список всех режимов, кроме cleanup:

<xsl:template match="@*|node()" mode="#default not-cleanup1 not-cleanup2" priority="-1"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()" mode="#current"/> 
    </xsl:copy> 
</xsl:template> 

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

  • Нет связанных вопросов^_^