2013-10-20 61 views
1

UL我有下面的示例XML與我:XML一起HTML關係:使用XSLT

<root> 
<Entities> 
<Entity> 
<property type=」Name」>Name1</property> 
<property type=」Parent_id」>-1</property> 
<property type=」id」>1</property> 
</Entity> 
<Entity> 
<property type=」Name」>Name2</property> 
<property type=」Parent_id」>1</property> 
<property type=」id」>2</property> 
</Entity> 

<Entity> 
<property type=」Name」>Name3</property> 
<property type=」Parent_id」>2</property> 
<property type=」id」>3</property> 
</Entity> 

<Entity> 
<property type=」Name」>Name4</property> 
<property type=」Parent_id」>2</property> 
<property type=」id」>4</property> 
</Entity> 

<Entity> 
<property type=」Name」>Name5</property> 
<property type=」Parent_id」>3</property> 
<property type=」id」>5</property> 
</Entity> 
</Entities> 
</root> 

的XML由實體,各自有一個父ID和一個ID。總是有一個這樣的實體,其父Id = -1,這意味着它是根實體。

我想要一個XSL,它可以將這種類型的XML轉換爲HTML UL,其中描述了父級子關係的位置。

例如,對於上面的示例中,輸出將是:

<ul> 
    <li>Name1</li> 
    <ul> 
    <li>Name2</li> 
    <ul> 
    <li>Name3</li> 
    <ul> 
    <li>Name5</li> 
    </ul> 
    <li>Name4</li> 
    </ul> 
    </ul> 
    </ul> 

的XML是動態的,實體的數目是不恆定的數字,這是保證的唯一事情是的存在父標識爲-1的實體將其標記爲所有的根實體。

我一直在嘗試爲此編寫XSLT,但最終以長時間運行的事情而未能想到任何策略來解決此問題。

通過投擲救生衣請幫幫忙,

回答

2

用途:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <ul> 
     <xsl:apply-templates select="//Entity[property[@type = 'Parent_id'] = -1]"/> 
    </ul> 
    </xsl:template> 
    <xsl:template match="Entity"> 
    <li> 
     <xsl:value-of select="property[@type = 'Name']"/> 
    </li> 
    <xsl:if test="../Entity[property[@type = 'Parent_id'] = current()/property[@type = 'id']]"> 
     <ul> 
     <xsl:apply-templates select="../Entity[property[@type = 'Parent_id'] = current()/property[@type = 'id']]"/> 
     </ul> 
    </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

輸出

<ul> 
    <li>Name1</li> 
    <ul> 
    <li>Name2</li> 
    <ul> 
     <li>Name3</li> 
     <ul> 
     <li>Name5</li> 
     </ul> 
     <li>Name4</li> 
    </ul> 
    </ul> 
</ul>