如何将页脚添加到 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>
</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>
</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> 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
我对 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>
</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>
</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> 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