我必须将元素“italic”转换为“i”,我找到了一些解决方案,但是当我将该代码放入新的xsl文件时,我从网站获得的那些解决方案正在工作,但是如果我把它放在现有的xsl它无法正常工作。
我得到的解决方案:
<xsl:template match="italic">
<I>
<xsl:apply-templates select="@* | node()"/>
</I>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
但我有以下xsl:
<xsl:template match="/">
<xsl:message>Inside root</xsl:message>
<xsl:apply-templates select="/root/ISSUES" />
</xsl:template>
<xsl:template match="/root/ISSUES">
some logic follows here( it might even internally call many templates)
</xsl:template>
有人能告诉我在这个xsl中放置解决方案(首先给出的代码)的位置吗?
谢谢, 希亚姆
答案 0 :(得分:1)
基本上,您需要在模板中确保子节点的处理保持不变,因此您需要在所有模板中拥有<xsl:apply-templates/>
(或<xsl:apply-templates select="@* | node()"/>
,如果您还想转换或复制属性)匹配可包含italic
元素的元素。因此,您当然可以编写与root/ISSUES
匹配的模板,但您需要确保通过执行<xsl:apply-templates/>
来保持对孩子的处理。
答案 1 :(得分:0)
添加
<xsl:template match="italic">
<I>
<xsl:apply-templates select="@* | node()"/>
</I>
</xsl:template>
只。属性和节点的处理将由其余代码处理。该示例显示了在没有任何逻辑的情况下如何进行复制。您的解决方案将如下所示:
<xsl:template match="/">
<xsl:message>Inside root</xsl:message>
<xsl:apply-templates select="/root/ISSUES" />
</xsl:template>
<xsl:template match="/root/ISSUES">
some logic follows here( it might even internally call many templates)
</xsl:template>
<xsl:template match="italic">
<I>
<xsl:apply-templates select="@* | node()"/>
</I>
</xsl:template>