2016-07-26 4 views
0

Мне было интересно, можно ли установить переменную в XSLT из другого файла XSLT?Определение переменной, которая была установлена ​​в другом xslt

Позвольте мне пояснить себя некоторым кодом.

По умолчанию У меня есть следующий файл (default.xsl):

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    exclude-result-prefixes="msxsl dom arr xsd i" 
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays" 
    xmlns:dom="http://www.test.nl/dom/"> 

    <xsl:output method="xml" indent="no" omit-xml-declaration="yes" /> 

    <!--Textbox--> 
    <xsl:template match="dom:TextBox"> 
     <xsl:variable name="placeHolderText">placeholder tekst</xsl:variable> 
     <xsl:element name="textarea"> 
      <xsl:attribute name="placeholder"> 
       <xsl:value-of select="$placeHolderText"/> 
      </xsl:attribute> 
     </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

В некоторых случаях я хочу отменить текущую реализацию по умолчанию, и там я создаю файл расширения: extension.xsl :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dom="http://www.test.nl/dom/" exclude-result-prefixes="dom"> 

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

    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> 

    <xsl:template match="dom:TextBox">  
     <xsl:variable name='placeHolderText'>unknown</xsl:variable> 
    </xsl:template> 

</xsl:stylesheet> 

в этом расширение файла Я хочу, чтобы установить placeHolderText. Мне было интересно, возможно ли это? Поскольку файл расширения всегда будет загружен после того, как по умолчанию уже обработана. Спасибо за ваш отзыв.

+0

Скажите, пожалуйста, какая версия XSLT! –

ответ

1

Одним из возможных решений может быть использование шаблона с mode и использование xsl:param вместо xsl:variable. Попробуйте default.xsl:

<!--Textbox--> 
    <xsl:template match="dom:TextBox" mode="useparam"> 
     <xsl:param name="placeHolderText">placeholder tekst</xsl:param> 

     <xsl:element name="textarea"> 
      <xsl:attribute name="placeholder"> 
       <xsl:value-of select="$placeHolderText"/> 
      </xsl:attribute> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="dom:TextBox"> 
    <xsl:apply-templates select="." mode="useparam" /> 
    </xsl:template> 

и в extension.xsl:

<xsl:template match="dom:TextBox"> 
    <xsl:apply-templates select="." mode="useparam" > 
    <xsl:with-param name="placeHolderText" select="'unknown'" /> 
    </xsl:apply-templates> 
</xsl:template> 
+1

Или шаблон extension.xsl может вызывать шаблон default.xsl с помощью xsl: apply-import (или xsl: next-match) без изменения режима. В XSLT 2.0 xsl: apply-import может устанавливать параметры с помощью xsl: with-param, если я правильно помню, что это недопустимо в 1.0. –

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