我有xml如下,
<doc>
<section id="1">This is <style type="normal">first</style> chapter</section>
<section id="2">This is <style type="normal">second</style> chapter</section>
<section id="3">This is <style type="normal">third</style> chapter</section>
<section id="4">This is <style type="normal">forth</style> chapter</section>
<section id="5">This is <style type="normal">fifth</style> chapter</section>
<section id="6">This is <style type="normal">sixth</style> chapter</section>
<section id="7">This is <style type="normal">seventh</style> chapter</section>
</doc>
我需要的是有条件地添加名为<newNode>
的新节点。我写的xsl如下,
<xsl:variable name="var" as="xs:boolean" select="true()"/>
<xsl:template match="section[position()=last()]">
<section id="{@id}">
<xsl:apply-templates/>
</section>
<newNode>New Node</newNode>
</xsl:template>
<xsl:template match="section[position()=3]">
<section id="{@id}">
<xsl:apply-templates/>
</section>
<newNode>New Node</newNode>
</xsl:template>
我的要求是,如果var
值为true()
,则在第3部分下添加新节点,如果var
值为false()
,则在最后部分节点下添加新节点。我已写过要在第3部分和最后部分添加<newNode>
。但是无法想到有条件地检查var值并相应地添加<newNode>
的方法。
如何在xslt中执行此任务?
答案 0 :(得分:4)
简化版@MartinHonnen的回答
<xsl:template match="section[position()=(if ($var) then 3 else last())]">
<section id="{@id}">
<xsl:apply-templates/>
</section>
<newNode>New Node</newNode>
</xsl:template>
答案 1 :(得分:2)
只需使用
<xsl:template match="section[not($var) and position()=last()]">
<section id="{@id}">
<xsl:apply-templates/>
</section>
<newNode>New Node</newNode>
</xsl:template>
<xsl:template match="section[$var and position()=3]">
<section id="{@id}">
<xsl:apply-templates/>
</section>
<newNode>New Node</newNode>
</xsl:template>
答案 2 :(得分:-1)
Martin Honnen的答案风格的变化:如果有理由限制match
节点选择,你也可以在模板内的条件中放置任何依赖于$var
的内容,
<xsl:template match="...">
<xsl:if test="not($var)">
<section id="{@id}">
...