XSL-дерево преобразования XML в HTML - PullRequest
1 голос
/ 23 ноября 2011

Я не могу понять, как поместить рекурсив в 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 ]

3 голосов
/ 23 ноября 2011

Это должно сработать (пробелы немного отличаются, но структура такая же, и это показывает принцип)

<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 голос
/ 23 ноября 2011

Попробуйте

<xsl:if test="./Operation"><ul> ... recurse here ... </ul></xsl:if>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...