我需要向标记fo:sequence添加一个属性initial-page-number
tha标签是
<fo:page-sequence master-reference="alternating" initial-page-number="1"><fo:page-sequence>
..
...
</fo:page-sequence>成为
<fo:page-sequence master-reference="alternating" initial-page-number="1">
..
</fo:page-sequence>但是使用xslt,我得到了两个fo:page:
<fo:page-sequence master-reference="alternating" initial-page-number="1"><fo:page-sequence>
</fo:page-sequence></fo:page-sequence>如何用新的fo:page序列替换旧的fo:page序列?
这是我的xsl样式表:
<xsl:stylesheet>
<xsl:template match="ss:split/fo:page-sequence">
<xsl:choose>
<xsl:when test="@master-reference['alternating']">
<xsl:element name="fo:page-sequence">
<xsl:for-each select="@*">
<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
</xsl:for-each>
<xsl:attribute name="initial-page-number">
<xsl:value-of select="1"/>
</xsl:attribute>
<xsl:copy>
<xsl:apply-templates select="child::*"/>
</xsl:copy>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match='comment()'>
<xsl:comment><xsl:value-of select="."/></xsl:comment>
</xsl:template>
<xsl:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>发布于 2015-12-05 01:46:16
样式表使用<xsl:element name="fo:page-sequence">创建一个fo:page-sequence,并使用<xsl:copy>创建另一个(因为匹配的元素是一个fo:page-sequence)。
只需删除xsl:copy (但保留<xsl:apply-templates select="child::*"/>,因为您希望处理当前节点的子节点!)你应该得到你需要的东西。
发布于 2015-12-05 04:07:01
您的样式表会更改每个fo:page-sequence,因为谓词['alternating']始终为真。
您可以检查匹配模式中的master-reference值,还可以只复制现有属性,并且可以复制fo:page-sequence的内容,因为它不会包含另一个fo:page-sequence
<xsl:template
match="ss:split/fo:page-sequence[@master-reference = 'alternating']">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:attribute name="initial-page-number">1</xsl:attribute>
<xsl:copy-of select="node()" />
</xsl:copy>
</xsl:template>https://stackoverflow.com/questions/34092692
复制相似问题