2011-11-23 153 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'。 –