我无法弄清楚如何在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>
我会帮助你。
感谢大家。
答案 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>