微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 XSLT 转换中向文本输出添加页脚?

如何解决如何在 XSLT 转换中向文本输出添加页脚?

我对 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。