首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向现有节点添加属性

向现有节点添加属性
EN

Stack Overflow用户
提问于 2015-12-05 00:15:49
回答 2查看 70关注 0票数 0

我需要向标记fo:sequence添加一个属性initial-page-number

tha标签是

代码语言:javascript
复制
<fo:page-sequence master-reference="alternating" initial-page-number="1"><fo:page-sequence>
..
...
</fo:page-sequence>

成为

代码语言:javascript
复制
<fo:page-sequence master-reference="alternating" initial-page-number="1">
..
</fo:page-sequence>

但是使用xslt,我得到了两个fo:page:

代码语言:javascript
复制
<fo:page-sequence master-reference="alternating" initial-page-number="1"><fo:page-sequence>
</fo:page-sequence></fo:page-sequence>

如何用新的fo:page序列替换旧的fo:page序列?

这是我的xsl样式表:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 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::*"/>,因为您希望处理当前节点的子节点!)你应该得到你需要的东西。

票数 0
EN

Stack Overflow用户

发布于 2015-12-05 04:07:01

您的样式表会更改每个fo:page-sequence,因为谓词['alternating']始终为真。

您可以检查匹配模式中的master-reference值,还可以只复制现有属性,并且可以复制fo:page-sequence的内容,因为它不会包含另一个fo:page-sequence

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34092692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档