XSLT 应用模板问题



如果我们说 为特定节点应用模板 ,它将应用于整个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]]"/> 

相关内容

  • 没有找到相关文章

最新更新