我有一个像下面的例子
<map>
<topicref href="disclaimer_PUBLIC.dita" outputclass="Top">
<fig>
<image href="">
qw
</image>
<image href="">
q1
</image>
</fig>
</topicref>
<topicref href="DocID030323.xml">
<fig>
<image href="">
qw
</image>
<image href="">
q1
</image>
</fig>
</topicref>
</map>
现在,我想删除标记<fig>
,并在topicref outputclass =“Top”时将属性width = 5cm添加到基础图像标记。
我想要输出如下:
<topicref href="../Topics/dita" outputclass="Top">
<image href="" width="5cm">
qw
</image>
<image href="" width="5cm">
q1
</image>
</topicref>
<topicref href="DocID030323.dita">
<fig class="- topic/fig ">
<image href=""
qw
</image>
<image href="">
q1
</image>
</fig>
</topicref>
我正在尝试实现此目的,但在xslt中一次只能执行1次操作。 如何结合这两种操作?
当我使用
时<xsl:template match="topicref[@outputclass='Top']/fig" >
<xsl:apply-templates select="node()"/>
</xsl:template>
删除了fig元素,但无法更改属性值。
当我使用
时<xsl:template match="topicref[@outputclass='Top']/fig/image" >
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="width">
<xsl:value-of select="'2.5'"/>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
甚至复制了fig元素。我想在1 xslt中执行这两个操作。 请帮忙。
答案 0 :(得分:0)
以下XSLT
<xsl:template match="topicref[@outputclass='Top']/fig">
<xsl:apply-templates></xsl:apply-templates>
</xsl:template>
<xsl:template match="topicref[@outputclass='Top']/fig/image" >
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:attribute name="width">
<xsl:value-of select="'2.5'"/>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"></xsl:copy-of>
<xsl:apply-templates></xsl:apply-templates>
</xsl:copy>
</xsl:template>
制作
<?xml version="1.0" encoding="UTF-8"?><map>
<topicref href="disclaimer_PUBLIC.dita" outputclass="Top">
<image href="" width="2.5">
qw
</image>
<image href="" width="2.5">
q1
</image>
</topicref>
<topicref href="DocID030323.xml">
<fig>
<image href="">
qw
</image>
<image href="">
q1
</image>
</fig>
</topicref>
</map>
希望这有帮助
答案 1 :(得分:0)
你可以更快地使用它:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="topicref[@outputclass='Top']/fig">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="image[ancestor::topicref[@outputclass='Top']]">
<image>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="width" select="'2.5'"/>
<xsl:apply-templates/>
</image>
</xsl:template>