XML到HTML XSL转换树

时间:2011-11-23 11:30:06

标签: html xml xslt

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

我有以下有效的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>

我会帮助你。

感谢大家。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

尝试

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