带有 CSV 可选模板的 XSLT header

XSLT with optional template for CSV header

我是 xslt 的新手,希望得到答案。

我有一个 xslt 文件并用它来编写一个 csv。 第一次写 csv,我想要一个 header。 但是当我追加 csv 的下一个内容时,我想删除 header.

下面是当前的xsl。 如何使 xsl 模板可选显示?

<xsl:template name="Header" match="/">
 <xsl:text>Id,Barcode,Name</xsl:text>
    <xsl:apply-templates select="abc:Info/Panel" />
</xsl:template>

<xsl:template name="Panel" match="abc:Info/Panel">
    <xsl:for-each select="Board/Component">
          
      <xsl:value-of select="../../../../../@Id"/>
      <xsl:text>,</xsl:text>
      
      <xsl:value-of select="../../../../../@Barcode"/>
      <xsl:text>,</xsl:text>
          
      <xsl:value-of select="../../../../../@Name"/>
      <xsl:text>,</xsl:text>
    </xsl:for-each>
</xsl:template>

将 xsl:param 添加到 xslt,例如:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:abc="some-namespace"
  version="1.0" 
  >
  <xsl:param name="writeHeader"                         select="'0'"/>

  <xsl:template  match="/">
    <xsl:if test="$writeHeader='1'">
      <xsl:text>Id,Barcode,Name</xsl:text>
    </xsl:if>
    <xsl:apply-templates select="abc:Info/Panel" />
  </xsl:template>
  
  <xsl:template match="abc:Info/Panel">
    <xsl:for-each select="Board/Component">
      
      <xsl:value-of select="../../../../../@Id"/>
      <xsl:text>,</xsl:text>
      
      <xsl:value-of select="../../../../../@Barcode"/>
      <xsl:text>,</xsl:text>
      
      <xsl:value-of select="../../../../../@Name"/>
      <xsl:text>,</xsl:text>
    </xsl:for-each>
  </xsl:template>
  
</xsl:stylesheet>

如果你想写 header,用参数调用你的 xsl-transformation:writeHeader=1