2014-04-01 115 views
0

我有成千上万的XML文件需要转换为HTML5。使用XSLT移动元素

问题在于列表以及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应该是(即嵌套在liul):

<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> 

我已经尝试了很多例子,我发现在这里,但无法让他们为我工作。

复制元素正在工作,但现在正在移动。而且我不知道如何“删除”被复制的原始内容。

这是我现在从我的转变得到:

<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

而你的XSLT代码?请编辑它到你的问题。 – kapa

回答

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> 

我得到您发布的输入结果。但我不确定它是否适用于更复杂的输入,您可能需要添加输入样本的变体。

+0

谢谢!这一个伎俩。我用一个简单的XML测试了这个,我用它来测试,但是一个更复杂的XML似乎可以正确转换。 – user3484996