2011-11-23 199 views
1

我无法弄清楚如何在简单的XML到HTML(UL + LI)转换来构建HTML树的XSL内部进行递归。XML到HTML XSL转换树

我有以下有效的XML:

<Operations> 
<Operation ID="C9EFC137-8FC7-4396-8D77-EB6AD67FC8C9" Name="A" > 
    <Operation ID="189C76A8-28FC-4B49-A4DA-A75253D8702C" Name="B" /> 
    <Operation ID="189C76A8-28FC-4B49-A4DA-A75253D8702C" Name="C"> 
     <Operation ID="6B458E8F-09BE-4033-B1BF-948DD7B96AAA" Name="D" /> 
      <Operation ID="189C76A8-28FC-4B49-A4DA-A75253D8702C" Name="E" /> 
      <Operation ID="189C76A8-28FC-4B49-A4DA-A75253D8702C" Name="F"> 
       <Operation ID="6B458E8F-09BE-4033-B1BF-948DD7B96AAA" Name="G" /> 
      </Operation> 
     </Operation> 
    </Operation> 
</Operation> 

的结构是一个多层次的具有无限的深度。 我需要改造它,所以它看起来是这样的:

<UL> 
<LI>A 
    <UL> 
     <LI>B</LI> 
     <LI>C 
      <UL> 
       <LI>D 
       <UL> 
        <LI>E</LI> 
        <LI>F 
         <UL> 
          <LI>G</LI> 
         </UL> 
        </LI> 
       </UL> 
      </UL> 

     </LI> 
    </UL> 
</LI> 

我会apreciate您的帮助。

谢谢大家。

回答

3

这应该做的伎俩(空白是不同的一点但是结构是一样的,它显示原理)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="Operations"> 
    <UL> 
     <xsl:apply-templates select="Operation" /> 
    </UL> 
    </xsl:template> 

    <xsl:template match="Operation"> 
    <LI> 
     <xsl:value-of select="@Name" /> 
     <xsl:if test="Operation"> 
     <UL> 
      <xsl:apply-templates select="Operation" /> 
     </UL> 
     </xsl:if> 
    </LI> 
    </xsl:template> 
</xsl:stylesheet> 
+0

感谢U贾斯汀。它真的解决了我的问题:) – TiagoDias

1

尝试

<xsl:if test="./Operation"><ul> ... recurse here ... </ul></xsl:if> 
+0

嗨。我在XSL中的知识水平很低,我理解你的想法,但我不知道如何递归调用!!!?!?! – TiagoDias

+1

好吧,阅读XSL的使用方法。注意'xsl:apply-templates'。 –