xslt仅在提供参数时调用模板

时间:2015-06-01 14:26:27

标签: xml xslt saxon

我有xlst,我只想在从java提供它的值(用transformer.setParameter(paramName, paramValue)设置)时才调用模板。我使用的是saxon 9 HE。

这是我的样式表

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

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

    <xsl:param name="supplierLogo" as="xs:string" required="no" select="''"/>

    <!-- add logo -->
    <xsl:template match="/INVOICES/INVOICE/SUPPLIER_LOGO">
        <xsl:if test="not($supplierLogo = '')">
            <SUPPLIER_LOGO>
                <xsl:value-of select="$supplierLogo"/>
            </SUPPLIER_LOGO>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>
  1. 如何有条件地运行模板?
  2. 现在没有提供值时,元素SUPPLIER_LOGO将从我的xml中删除。如何避免?

1 个答案:

答案 0 :(得分:0)

从身份转换模板

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

然后使用

<xsl:template match="/INVOICES/INVOICE/SUPPLIER_LOGO[$supplierLogo = ''"/>

<xsl:template match="/INVOICES/INVOICE/SUPPLIER_LOGO[$supplierLogo != '']">
    <xsl:copy>
            <xsl:value-of select="$supplierLogo"/>
    </xsl:copy>
</xsl:template>