定义在另一个xslt中设置的变量

时间:2016-07-26 13:55:49

标签: xml 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。我想知道这有可能吗?因为在已经处理默认值之后将始终加载扩展文件。感谢您的反馈。

1 个答案:

答案 0 :(得分: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>