如何将页脚添加到 XSLT 转换中的文本输出?

How to add footers to a text output in a XSLT transformation?

我对 xml 文件有要求:我需要在文本输出中添加页脚。但我是 XSLT 的新手,请帮助我。

输入Xml:

<?xml version="1.0" encoding="UTF-8"?>
<Document>
   <TRU_TRANSFERORDERENTITY>
      <ERPORDERLINENUM>1.0000000000000000</ERPORDERLINENUM>
      <ERPORDERLINE>1000-000001</ERPORDERLINE>
      <SKU>24867B43</SKU>
      <STOREID />
      <WAREHOUSE>W3501</WAREHOUSE>
   </TRU_TRANSFERORDERENTITY>
   <TRU_TRANSFERORDERENTITY>
      <ERPORDERLINENUM>2.0000000000000000</ERPORDERLINENUM>
      <ERPORDERLINE>1000-000001</ERPORDERLINE>
      <SKU>483055</SKU>
      <STOREID />
      <WAREHOUSE>W3501</WAREHOUSE>
   </TRU_TRANSFERORDERENTITY>
   <TRU_TRANSFERORDERENTITY>
      <ERPORDERLINENUM>1.0000000000000000</ERPORDERLINENUM>
      <ERPORDERLINE>1000-000002</ERPORDERLINE>
      <SKU>24867B43</SKU>
      <STOREID />
      <WAREHOUSE>W3501</WAREHOUSE>
   </TRU_TRANSFERORDERENTITY>
   <TRU_TRANSFERORDERENTITY>
      <ERPORDERLINENUM>2.0000000000000000</ERPORDERLINENUM>
      <ERPORDERLINE>1000-000002</ERPORDERLINE>
      <SKU>483055</SKU>
      <STOREID />
      <WAREHOUSE>W3501</WAREHOUSE>
   </TRU_TRANSFERORDERENTITY>
   <TRU_TRANSFERORDERENTITY>
      <ERPORDERLINENUM>3.0000000000000000</ERPORDERLINENUM>
      <ERPORDERLINE>1000-000002</ERPORDERLINE>
      <SKU>483055</SKU>
      <STOREID />
      <WAREHOUSE>W3501</WAREHOUSE>
   </TRU_TRANSFERORDERENTITY>
</Document>

输出:

HEADER|24867B43|1.0000000000000000
1000-000001|W3501
1000-000001|1.0000000000000000|24867B43
1000-000001|2.0000000000000000|483055
1000-000002|W3501
1000-000002|1.0000000000000000|24867B43
1000-000002|2.0000000000000000|483055
1000-000002|3.0000000000000000|483055
FOOTER|24867B43|1.0000000000000000

我的 xslt:

<?xml version='1.0' encoding='UTF-8'?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="1.0">
   <xsl:output method="text"/>
   
    <xsl:template match="/">
    <xsl:text>HEADER</xsl:text>
     <xsl:text>|</xsl:text>
     <xsl:value-of select="Document/TRU_TRANSFERORDERENTITY/SKU"/>
     <xsl:text>|</xsl:text>
     <xsl:value-of select="Document/TRU_TRANSFERORDERENTITY/ERPORDERLINENUM"/>
    <xsl:apply-templates/>
  </xsl:template>
   <xsl:key name="keyAssessmentID" match="TRU_TRANSFERORDERENTITY" use="ERPORDERLINE"/>
   <xsl:template match="/*">
       <Document>
         <xsl:for-each select=".//TRU_TRANSFERORDERENTITY[generate-id(.) = generate-id(key('keyAssessmentID',ERPORDERLINE)[1])]">
            <xsl:variable name="ERPORDERLINE" select="ERPORDERLINE"/>
            <xsl:text>&#xa;</xsl:text>
            <xsl:value-of select="ERPORDERLINE"/>
            <xsl:text>|</xsl:text>
            <xsl:value-of select="WAREHOUSE"/>
            <xsl:apply-templates select="key('keyAssessmentID', $ERPORDERLINE)"/>
         </xsl:for-each>
         </Document>
  </xsl:template>
   <xsl:template match="TRU_TRANSFERORDERENTITY">
         <xsl:text>&#xa;</xsl:text>
         <xsl:apply-templates select="ERPORDERLINE"/>
         <xsl:text>|</xsl:text>
         <xsl:apply-templates select="ERPORDERLINENUM"/>
         <xsl:text>|</xsl:text>
         <xsl:apply-templates select="SKU"/>
   </xsl:template>
   
   <xsl:template match="TRU_TRANSFERORDERENTITY/*">
       <xsl:copy>
    <xsl:apply-templates/>
    
  </xsl:copy>
  
   </xsl:template>
</xsl:stylesheet>

我不知道如何像要求一样在输出的末尾添加固定文本和元素值。 我可以添加页眉,但可以添加页脚。找不到办法做到这一点。 请帮助我,谢谢你们!

在带有 match="/" 的模板中输出“页眉”信息的地方,在模板末尾添加任何要输出为“页脚”的信息,在您当前拥有的最后一个元素之后在那里。

将您的主模板更改为

<xsl:template match="/">
    <xsl:text>HEADER</xsl:text>
    <xsl:text>|</xsl:text>
    <xsl:value-of select="Document/TRU_TRANSFERORDERENTITY/SKU"/>
    <xsl:text>|</xsl:text>
    <xsl:value-of select="Document/TRU_TRANSFERORDERENTITY/ERPORDERLINENUM"/>
    <xsl:apply-templates select="node()|@*" />
    <!-- Here comes the footer -->
    <xsl:text>&#10;FOOTER</xsl:text>
    <xsl:text>|</xsl:text>
    <xsl:value-of select="Document/TRU_TRANSFERORDERENTITY[3]/SKU"/>
    <xsl:text>|</xsl:text>
    <xsl:value-of select="Document/TRU_TRANSFERORDERENTITY[3]/ERPORDERLINENUM"/>        
</xsl:template>

现在,您向输出添加页脚。当然,根据您的示例输出,我只在 select 表达式中包含示例数据。

输出为:

HEADER|24867B43|1.0000000000000000
1000-000001|W3501
1000-000001|1.0000000000000000|24867B43
1000-000001|2.0000000000000000|483055
1000-000002|W3501
1000-000002|1.0000000000000000|24867B43
1000-000002|2.0000000000000000|483055
1000-000002|3.0000000000000000|483055
FOOTER|24867B43|1.0000000000000000