当前位置: 首页 > 知识库问答 >
问题:

XSLT应用模板问题

张毅
2023-03-14

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

我只想在注释不是作为表的前兄弟或后兄弟出现时应用注释模板。如果它在表的后面或前面,那么它应该位于表之间、表的下面或上面,就像在输出中一样。

谢啦

共有1个答案

白高超
2023-03-14

代替

    <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]]"/> 
 类似资料:
  • 根据xslt中的变量应用模板的最佳方法是什么?变量将通过java脚本代码更改。我已经阅读了xslt v 2.0中的函数,但答案解释得不是很好,也不符合我的要求 我尝试了下一个: 我创建了一个全局变量 然后像这样应用 然后像这样匹配 但没有显示任何内容。

  • 我有一个XML,我必须循环测试结果和组件。当组件的类型与特定名称匹配时,我必须对该组件应用不同的模板。我为每种组件类型创建了一个XSL-to,具有不同的模板,例如:NORMALTEXTBOX。但是这些模板并没有被应用到组件块中。。。谁能帮我一下吗? XML XSL

  • 我对XSLT很陌生,并且一直在努力实现递归模板,它通过多个文本节点并搜索匹配项。创建递归模板时,我收到一条错误消息,说“/的第一个操作数的必需项类型是node();提供的值具有项类型xs: string”。我不知道如何选择多个节点作为节点,而不是字符串。 目标:我有多个测试节点,如 我想遍历这些节点以寻找匹配的数字。当找到这个数字时,我需要选择父元素属性的子字符串。 下面是带有递归模板的样式表的一

  • 英文原文:http://emberjs.com/guides/application/the-application-template/ 应用模板是应用启动的时候默认渲染的模板。 你应该把你的header、footer和其他装饰性的内容放在应用模板里面。另外,应用模版中至少需要一个{{outlet}}占位符,以便路由能根据当前的URL将适当的模版渲染进来。 下面是一个应用模板的例子: 1 2 3

  • 我有以下输入: 我的XSL: 目标是对于每个具有query结果/记录的“query1”,我从该query结果/记录/列[@name='id_contact']中获取值,并从“query2”中删除每个在query2/query结果/记录/列[@name='id_contact']中具有该值的记录。这部分可以工作,但下一部分不能正常工作:然后,在删除query2中的值后,获取剩余的query2/id_

  • 我正在寻找如何根据XML文件中的参数将模板应用于XML文件。 XML文件具有以下格式: XML文件由另一个程序生成,需要特定的输出格式,具体取决于参数“outt-type”的值。如果必须同时为多个输出生成结果,则此参数可能会出现多次,因此需要一个循环。 以下是一个具有多个输出类型参数的示例: 我想创建一个主模板文件。xsl,并在文件中导入/包括其他模板文件(generate-type-1.xsl、