我需要将数万个XML文件转换为HTML5。
问题在于列表以及XML中的嵌套方式,因为它们需要以HTML格式嵌套。
以下是XML的外观:
<list>
<item>1</item>
<item>2</item>
<list>
<item>2.1</item>
<list>
<item>2.1.1</item>
<item>2.1.2</item>
</list>
<item>2.2</item>
<item>2.2</item>
</list>
<item>3</item>
<item>4</item>
</list>
HTML应该如何(即ul
嵌套在li
内):
<ul>
<li>1</li>
<li>2
<ul>
<li>2.1
<ul>
<li>2.1.1</li>
<li>2.1.2</li>
</ul>
</li>
<li>2.2</li>
<li>2.2</li>
</ul>
</li>
<li>3</li>
<li>4</li>
</ul>
我尝试过很多我在这里找到的例子,但是不能让他们为我工作。
复制元素正在运行但现在正在移动。而且我不知道如何删除&#34;复制的原始内容。
这就是我现在从转型中得到的结果:
<ul>
<li>1</li>
<li>2
<ul>
<li>2.1
<ul>
<li>2.1.1</li>
<li>2.1.2</li>
</ul>
</li>
<ul>
<li>2.1.1</li>
<li>2.1.2</li>
</ul>
<li>2.2</li>
<li>2.2</li>
</ul>
</li>
<ul>
<li>2.1
<ul>
<li>2.1.1</li>
<li>2.1.2</li>
</ul>
</li>
<ul>
<li>2.1.1</li>
<li>2.1.2</li>
</ul>
<li>2.2</li>
<li>2.2</li>
</ul>
<li>3</li>
<li>4</li>
</ul>
修改
这是我使用过的xslt:
<xsl:template match="list">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="item">
<li>
<xsl:apply-templates/>
<xsl:if test="following-sibling::*[1][self::list]">
<xsl:apply-templates select="following-sibling::list[1]"/>
</xsl:if>
</li>
</xsl:template>
答案 0 :(得分:0)
使用
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="html" version="5.0"/>
<xsl:strip-space elements="*"/>
<xsl:template match="list">
<ul>
<xsl:apply-templates select="item"/>
</ul>
</xsl:template>
<xsl:template match="item">
<li>
<xsl:apply-templates select="node() | following-sibling::*[1][self::list]"/>
</li>
</xsl:template>
</xsl:stylesheet>
我得到您发布的输入结果。但我不确定它是否适用于更复杂的输入,您可能希望添加输入样本的变体。