如果我们说 为特定节点应用模板 ,它将应用于整个xml,无论它在哪里找到该节点/标签。
我的问题是我有一个xml,我需要根据条件应用模板,基本上保持一些顺序。
输入 xml :
enter code here
<step>
<note>..</note>
<para>..</para>
<table>
..
..
</table>
<note>...</note>
<table>
..
..
</table>
<table>
..
..
</table>
<note>...</note>
<text>...</text>
</step>
输出应为 ,
<fc:topic>
<fc:subTask id="S0EC0A941" lbl="E.">
<fc:para>..</fc:para>
<fc:text>...</fc:text>
<fc:note>..</fc:note>
<fc:table>
..
..
</fc:table>
<fc:note>...</fc:note>
<fc:table>
..
..
</fc:table>
<fc:table>
..
..
</fc:table>
<fc:note>...</fc:note>
</fc:subTask>
</fc:topic>
我的 XSLT 是这样的,
<xsl:template match="step">
<fc:topic>
<fc:subTask>
<xsl:if test="@id">
<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
</xsl:if>
<xsl:attribute name="lbl"><xsl:number format="A."/></xsl:attribute>
<xsl:apply-templates select="para"/>
<xsl:apply-templates select="text"/>
<xsl:apply-templates select="note"/>
<xsl:apply-templates select="table"/>
</fc:subTask>
</fc:topic>
需要根据以下条件重构XSL,
仅当注释不是作为表的前面或后面的兄弟姐妹出现时,我才想应用注释模板。如果表的后面或前面的同级,那么它应该在表之间,在表的下方或上方,就像在输出中一样。
谢谢
替换
<xsl:apply-templates select="para"/>
<xsl:apply-templates select="text"/>
<xsl:apply-templates select="note"/>
<xsl:apply-templates select="table"/>
跟
<xsl:apply-templates select="para, text, note[not(preceding-sibling::*[1][self::table] | following-sibling::*[1][self::table])]"/>
<xsl:apply-templates select="table | note[preceding-sibling::*[1][self::table] or following-sibling::*[1][self::table]]"/>