XSLT-FO for-each
XSLT-FO for-each
这是我的 xml:
<OrdersSchedulePDFView>
<OrdersSchedulePDFViewRow>
<Locations>
<LocName>Text1</LocName>
<LocName>Text2</LocName>
</Locations>
</OrdersSchedulePDFViewRow>
</OrdersSchedulePDFView>
这是我的 xslt-fo 文件中的片段:
<xsl:template match="OrdersSchedulePDFView">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:for-each select="./OrdersSchedulePDFViewRow">
<fo:page-sequence master-reference="all">
<fo:flow flow-name="xsl-region-body">
<xsl:for-each select="Locations">
<xsl:apply-templates select="."/>
</xsl:for-each>
</fo:flow>
</fo:page-sequence>
</xsl:for-each>
</fo:root>
</xsl:template>
<xsl:template match="Locations">
<fo:block text-align="left" font-family="Arial">
<fo:inline font-weight="bold"><xsl:value-of select="LocName"/></fo:inline>
</fo:block>
</xsl:template>
</xsl:stylesheet>
但是在 PDF 中我只有一个 LocName。如何获取所有 LocName 元素?
我的正确代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
<xsl:template match="OrdersSchedulePDFView">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:for-each select="./OrdersSchedulePDFViewRow">
<fo:page-sequence master-reference="all">
<fo:flow flow-name="xsl-region-body">
<fo:block font-weight="bold" background-color="black" color="white" padding="2pt" font-family="Arial">Stores</fo:block>
<fo:block text-align="left" font-family="Arial">
<fo:inline font-weight="bold"><xsl:apply-templates select="Locations"/></fo:inline>
</fo:block>
</fo:flow>
</fo:page-sequence>
</xsl:for-each>
</fo:root>
</xsl:template>
<xsl:template match="Locations">
<xsl:for-each select="./LocName">
<fo:block text-align="left" font-family="Arial">
<fo:inline font-weight="bold"><xsl:value-of select="."/></fo:inline>
</fo:block>
</xsl:for-each>
</xsl:template>
根据您的更新:由于显然您没有要为 Locations
元素添加的代码,您可以通过更改来缩短代码:
<xsl:apply-templates select="Locations"/>
至:
<xsl:apply-templates select="Locations/LocName"/>
然后做:
<xsl:template match="LocName">
<fo:block text-align="left" font-family="Arial">
<fo:inline font-weight="bold">
<xsl:value-of select="."/>
</fo:inline>
</fo:block>
</xsl:template>
这是我的 xml:
<OrdersSchedulePDFView>
<OrdersSchedulePDFViewRow>
<Locations>
<LocName>Text1</LocName>
<LocName>Text2</LocName>
</Locations>
</OrdersSchedulePDFViewRow>
</OrdersSchedulePDFView>
这是我的 xslt-fo 文件中的片段:
<xsl:template match="OrdersSchedulePDFView">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:for-each select="./OrdersSchedulePDFViewRow">
<fo:page-sequence master-reference="all">
<fo:flow flow-name="xsl-region-body">
<xsl:for-each select="Locations">
<xsl:apply-templates select="."/>
</xsl:for-each>
</fo:flow>
</fo:page-sequence>
</xsl:for-each>
</fo:root>
</xsl:template>
<xsl:template match="Locations">
<fo:block text-align="left" font-family="Arial">
<fo:inline font-weight="bold"><xsl:value-of select="LocName"/></fo:inline>
</fo:block>
</xsl:template>
</xsl:stylesheet>
但是在 PDF 中我只有一个 LocName。如何获取所有 LocName 元素?
我的正确代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
<xsl:template match="OrdersSchedulePDFView">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:for-each select="./OrdersSchedulePDFViewRow">
<fo:page-sequence master-reference="all">
<fo:flow flow-name="xsl-region-body">
<fo:block font-weight="bold" background-color="black" color="white" padding="2pt" font-family="Arial">Stores</fo:block>
<fo:block text-align="left" font-family="Arial">
<fo:inline font-weight="bold"><xsl:apply-templates select="Locations"/></fo:inline>
</fo:block>
</fo:flow>
</fo:page-sequence>
</xsl:for-each>
</fo:root>
</xsl:template>
<xsl:template match="Locations">
<xsl:for-each select="./LocName">
<fo:block text-align="left" font-family="Arial">
<fo:inline font-weight="bold"><xsl:value-of select="."/></fo:inline>
</fo:block>
</xsl:for-each>
</xsl:template>
根据您的更新:由于显然您没有要为 Locations
元素添加的代码,您可以通过更改来缩短代码:
<xsl:apply-templates select="Locations"/>
至:
<xsl:apply-templates select="Locations/LocName"/>
然后做:
<xsl:template match="LocName">
<fo:block text-align="left" font-family="Arial">
<fo:inline font-weight="bold">
<xsl:value-of select="."/>
</fo:inline>
</fo:block>
</xsl:template>