2014-04-01 145 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