如何解决如何根据项目的值更改页面顺序,但在第二个页面顺序完成后返回?
我正在尝试设置一个基于XML值的样式表,该样式表将更改当前使用的页面顺序。 例如,对于以下XML:
<items>
<item order="1">item1</item>
<item order="2">item2</item>
<item order="3">item3</item>
<item order="0">item4</item>
<item order="4">item5</item>
</items>
预期结果将是:
....<fo:page-sequence master-reference="A4PageSeq">
<fo:flow flow-name="body">
<fo:block>item1</fo:block>
<fo:block>item2</fo:block>
<fo:block>item3</fo:block>
</fo:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="A3PageSeq">
<fo:flow flow-name="body">
<fo:block>item4</fo:block>
</fo:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="A4PageSeq">
<fo:flow flow-name="body">
<fo:block>item5</fo:block>
</fo:flow>
</fo:page-sequence>..
过去,我使用下面的代码,因为@order可以取值“ 1”或“ 0”。但是,这对于此新输入不再起作用。我试图使用变量,但是最终它是通过在同一页面顺序下添加所有内容来结束的。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="2.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4Page" fo:page-width="8.5in" fo:page-height="11in">
<fo:region-body region-name="body" margin="0.7in"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="A3Page" fo:page-width="11in" fo:page-height="17in">
<fo:region-body region-name="body" margin="0.7in"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="A4PageSeq">
<fo:repeatable-page-master-reference master-reference="A4Page"/>
</fo:page-sequence-master>
<fo:page-sequence-master master-name="A3PageSeq">
<fo:repeatable-page-master-reference master-reference="A3Page"/>
</fo:page-sequence-master>
</fo:layout-master-set>
<xsl:apply-templates/>
</fo:root>
</xsl:template>
<xsl:variable name="groupKey">
<xsl:choose>
<xsl:when test="/items/item/@order != 0">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:template match="items">
<xsl:for-each-group select="item" group-adjacent="@order">
<xsl:choose>
<xsl:when test="$groupKey != 0">
<fo:page-sequence master-reference="A4PageSeq">
<fo:flow flow-name="body">
<xsl:for-each select="current-group()">
<xsl:apply-templates select="."/>
<fo:block>This is A4 page seq</fo:block>
</xsl:for-each>
</fo:flow>
</fo:page-sequence>
</xsl:when>
<xsl:otherwise>
<fo:page-sequence master-reference="A3PageSeq">
<fo:flow flow-name="body">
<xsl:for-each select="current-group()">
<xsl:apply-templates select="."/>
</xsl:for-each>
</fo:flow>
</fo:page-sequence>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="item">
<fo:block>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
</xsl:stylesheet>
如何对@order属性进行分组,以便每次@ order = 0时页面顺序都会更新?
解决方法
我不确定我是否了解逻辑,但似乎正在使用
dispatch:
- url: "example.com/*"
service: default
- url: "www.example.com/*"
service: default
可能会。如果可以有相邻的<xsl:for-each-group select="item" group-adjacent="@order != 0">
<xsl:choose>
<xsl:when test="current-grouping-key()">
<fo:page-sequence master-reference="A4PageSeq">
<fo:flow flow-name="body">
<xsl:apply-templates select="current-group()"/>
</fo:flow>
</fo:page-sequence>
</xsl:when>
<xsl:otherwise>
<fo:page-sequence master-reference="A3PageSeq">
<fo:flow flow-name="body">
<xsl:apply-templates select="current-group()"/>
</fo:flow>
</fo:page-sequence>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
项,并且每个项都需要自己的序列,则在@order=0
内,然后在内部使用xsl:otherwise
或将current-group()推送到设置序列的模板中。 / p>
您可以删除<xsl:variable name="groupKey">
变量,然后将主模板更改为
<xsl:template match="items">
<xsl:for-each-group select="item" group-adjacent="@order != 0">
<xsl:choose>
<xsl:when test="@order != 0">
<fo:page-sequence master-reference="A4PageSeq">
<fo:flow flow-name="body">
<xsl:for-each select="current-group()">
<xsl:apply-templates select="."/>
<!-- <fo:block>This is A4 page seq</fo:block> -->
</xsl:for-each>
</fo:flow>
</fo:page-sequence>
</xsl:when>
<xsl:otherwise>
<fo:page-sequence master-reference="A3PageSeq">
<fo:flow flow-name="body">
<xsl:for-each select="current-group()">
<xsl:apply-templates select="."/>
</xsl:for-each>
</fo:flow>
</fo:page-sequence>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>
现在,结果应该与预期的一样。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。