2016-02-26 50 views
1

我'XSLT模板新XSLT和需要帮助递归和条件

这是我的XML源文件:

<cars best-category="83"> 
    <category id="1" name="SUV"> 
     <category id = "50" name="BMW"> 
     </category> 
    </category> 
    <category id="2" name="combi"> 
     <category id = "60" name="Volkswagen"> 
      <category id="102" name="4x4"> 
      </category>  
     </category>      
     <category id = "83" name="Skoda">   
     </category> 
     <category id = "32" name="Seat">    
     </category> 
    </category> 
    <category id="12" name="another"> 
    </category> 
</cars> 

,我需要这个结果(通过BEST-选择全名属性路径类别值):

<CATEGORYTEXT>combi | Skoda</CATEGORYTEXT> 

我的XSLT:

 <xsl:for-each select="cars/category">    
      <CATEGORYTEXT>    
      <xsl:apply-templates select="category" > 
       <xsl:with-param name="text" > 
       <xsl:value-of select="@name" /> 
       </xsl:with-param> 
      </xsl:apply-templates>    
      </CATEGORYTEXT> 
     </xsl:for-each 

和我的模板:

<xsl:template match="category"> 
      <xsl:param name="text" /> 
      <xsl:if test="category"> 
       <xsl:apply-templates select="category"> 
       <xsl:with-param name="text"> 
        <xsl:value-of select="$text" /> 
        <xsl:text>&#xA;|&#xA;</xsl:text> 
        <xsl:value-of select="@name" /> 
       </xsl:with-param> 
       </xsl:apply-templates> 
      </xsl:if> 
      <xsl:value-of select="$text" /> 
      <xsl:text>&#xA;|&#xA;</xsl:text> 
      <xsl:value-of select="@name" />  
     </xsl:template> 

芽我不知道,如何筛选结果的最佳类别值...谁能帮助我?

感谢

回答

0

如何:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 

<xsl:template match="cars"> 
    <xsl:apply-templates select=".//category[@id=current()/@best-category]"/> 
</xsl:template> 

<xsl:template match="category"> 
    <CATEGORYTEXT> 
     <xsl:for-each select="ancestor::category"> 
      <xsl:value-of select="@name" /> 
      <xsl:text> | </xsl:text> 
     </xsl:for-each> 
     <xsl:value-of select="@name" /> 
    </CATEGORYTEXT> 
</xsl:template> 

</xsl:stylesheet> 
+0

这是确定这个确切的例子,但如果有下一个内部类的子元素?像这样: '<汽车最佳类别= “87”> \t <类别ID = “2” 名称= “组合式”> <类别ID = “83” 名称= “斯柯达”> \t \t \t <类别ID = “87” 名称= “4×4”> \t ' 或 '<汽车最佳类别= “12”> \t <类别ID = “12” 名称=“另一“> \t ' – zvodev

+0

请不要在评论中发布代码 - 而是编辑您的问题。 –

+0

规则就像操作系统中的文件夹路径,如果best-category = 12,那么结果只是“another”,或者如果102然后'combi |大众| 4x4' – zvodev