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

XSLT基于属性在另一个模板内应用模板

焦信鸥
2023-03-14

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

XML

<Report>
<Test_Results>
   <Test_Result TestID="1" TestName="sampleTest" >
       <Component Type="NORMALTEXTBOX">
         <ComponentName>Component1</ComponentName>
         <ComponentId></ComponentId>
         <Method></Method>
         <Results></Results>
       </Component>
       <Component Type="NUMERICTEXTBOX">
         <ComponentName>Component2</ComponentName>
         <ComponentId></ComponentId>
         <Method></Method>
         <Results></Results>
       </Component>
   </Test_Result>

   <Test_Result TestID="1" TestName="">
       <Component Type="NORMALTEXTBOX">
         <ComponentName></ComponentName>
         <ComponentId></ComponentId>
         <Method></Method>
         <Results></Results>
       </Component>
   </Test_Result>
 </Test_Results>
</Report>

XSL

            <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="html" omit-xml-declaration="yes"/>
        <xsl:template match="/">
          <html>
          <body>
            <xsl:apply-templates select="Report/Test_Results"/>
          </body>
          </html>
        </xsl:template>

        <xsl:template match="Test_Results">
           <xsl:for-each select="Test_Result">
             <xsl:for-each select="Component">
               <xsl:choose>
                  <xsl:when test="@Type = 'NORMALTEXTBOX'">
                     <xsl:apply-templates select="Component" mode="normaltext"/>
                  </xsl:when>

                  <xsl:when test="@Type = 'NUMERICTEXTBOX'">
                     <xsl:apply-templates select="Component" mode="numerictext"/>
                  </xsl:when>
               </xsl:choose>
             </xsl:for-each>
          </xsl:for-each>
        </xsl:template>

        <xsl:template match="Component" mode="normaltext">
            <h1> different styles to be applied, only some values of component will be taken</h1>
        </xsl:template>

        <xsl:template match="Component" mode="numerictext">
            <h1>different styles to be applied, only some values of component will be taken</h1>
        </xsl:template>

    </xsl:stylesheet>

共有2个答案

胡厉刚
2023-03-14

我已经明白了......而不是应用模板,我尝试了下面的方法,它应用了该功能组件的模板。

 <xsl:call-template name="NORMALTEXTBOX">
栾鸣
2023-03-14

由于xsl:choose中的上下文节点是Component,因此xsl:apply-template的select表达式应该是current():

<xsl:choose>
<xsl:when test="@Type = 'NORMALTEXTBOX'">
    <xsl:apply-templates select="." mode="normaltext"/>
</xsl:when>

<xsl:when test="@Type = 'NUMERICTEXTBOX'">
    <xsl:apply-templates select="." mode="numerictext"/>
</xsl:when>
</xsl:choose>

但是,更好的方法是只在模板匹配中包含类型条件,如下所示:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:template match="/">
    <html>
        <body>
            <xsl:apply-templates select="Report/Test_Results"/>
        </body>
    </html>
</xsl:template>
<xsl:template match="Test_Results">
    <xsl:for-each select="Test_Result">
        <xsl:apply-templates select="Component"/>
    </xsl:for-each>
</xsl:template>
<xsl:template match="Component[@Type = 'NORMALTEXTBOX']">
    <h1> different styles to be applied, only some values of component will be taken</h1>
</xsl:template>
<xsl:template match="Component[@Type = 'NUMERICTEXTBOX']">
    <h1>different styles to be applied, only some values of component will be taken</h1>
</xsl:template>
</xsl:stylesheet>
 类似资料:
  • 我有以下xml文件结构: 我的目标是借助xslt文件生成html输出。在这样做的过程中,我想应用一个模板来指导根元素的子元素,该元素将标记的名称输出为标题1,其内容包含在 为了更容易理解我想要的是HTML输出的示例: 现在,我的尝试如下所示:http://pastebin.com/wKgSLbcE 但它不适用于

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

  • 如果我们说为特定节点应用模板,那么它将应用于整个xml中,无论它在哪里找到该节点/标记。 我的问题是我有一个xml,我需要根据条件应用模板,基本上保持一些秩序。 输入xml: 输出应为, 我的XSLT是这样的, 需要根据以下条件重新构造XSL, 我只想在注释不是作为表的前兄弟或后兄弟出现时应用注释模板。如果它在表的后面或前面,那么它应该位于表之间、表的下面或上面,就像在输出中一样。 谢啦

  • 我正在使用XML构建调查。调查中的一个(矩阵)问题,具有列和行,如下所示: 我想使用不同的XSLT模板,这取决于 节点。因此,尽管所有问题都是以相同的方式构建的,但它们看起来可能不同。我想用不同的。每个问题类型的XSLT文件,定义问题、列和行的外观。 如果我使用以下代码包括“模块/模板”: 该模板包含问题、行和列的格式定义。如果同一页面上有不同类型的问题,会不会出现干扰,因为定义每种类型的问题、行

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

  • 问题内容: 我有一个非常基本的模板(basic_template.html),并希望使用使用另一部分模板格式化的数据来填写。basic_template.html可能包含使用部分模板格式化的几件事。 我应该如何在views.py中构建代码? 我这样做的原因是稍后将使用Ajax填充。我这样做对吗? 问题答案: 你可以做: 另一个Django模板在哪里。在这里,你可以放入将用Ajax获得的HTML。