[英]How to convert XML hierarchy to table with XSLT 1.0?
我正在嘗試將此XML層次結構轉換為HTML表
<TopTerm Id="1" Name="Company">
<narrower Id="2" Name="Office">
<narrower Id="2.1" Name="Desk">
<narrower Id="2.1.1" Name="PC"/>
</narrower>
<narrower Id="2.2" Name="Cabinet">
<narrower Id="2.2.1" Name="Folder"/>
<narrower Id="2.2.2" Name="Files"/>
</narrower>
</narrower>
</TopTerm>
所需的輸出:
<table>
<tr>
<th>Level 1</th>
<th>Level 2</th>
<th>Level 3</th>
<th>Level 4</th>
<th>Id</th>
</tr>
<tr>
<td>Company</td>
<td>Office</td>
<td></td>
<td></td>
<td>2</td>
</tr>
<tr>
<td>Company</td>
<td>Office</td>
<td>Desk</td>
<td></td>
<td>2.1</td>
</tr>
</table>
基本上,它需要為每個層次結構級別創建1 <tr>
,並包括其祖先。
我用這個XSLT
<xsl:template match="/">
<table>
<tr>
<th>Level 1</th>
<th>Level 2</th>
<th>Level 3</th>
<th>Level 4</th>
<th>Id</th>
</tr>
<xsl:apply-templates select="//TopTerm"/>
</table>
</xsl:template>
<xsl:template match="TopTerm">
<tr>
<td><xsl:value-of select="@Name"/></td>
<td></td>
<td></td>
<td></td>
<td><xsl:value-of select="@Id"/></td>
</tr>
<xsl:apply-templates select="descendant-or-self::narrower"/>
</xsl:template>
<xsl:template match="narrower">
<tr>
<xsl:for-each select="ancestor-or-self::*">
<td><xsl:value-of select="@Name"/></td>
</xsl:for-each>
<td><xsl:value-of select="@Id"/></td> <!--Problem is here-->
</tr>
</xsl:template>
問題是<td>
的ID並不總是處於正確的位置,因為每個級別中祖先的數量都不相同。 如何獲得每個節點的正確ID,並將其放入正確的ID列中?
我找到了另一種方法,可以通過計算當前節點的祖先數量來添加所需的<td>
。
<xsl:template match="narrower">
<tr>
<xsl:for-each select="ancestor-or-self::*">
<td>
<xsl:value-of select="@Name"/>
</td>
</xsl:for-each>
<xsl:if test="count(ancestor-or-self::*) = 1">
<td/>
<td/>
<td/>
<td/>
</xsl:if>
<xsl:if test="count(ancestor-or-self::*) = 2">
<td/>
<td/>
</xsl:if>
<xsl:if test="count(ancestor-or-self::*) = 3">
<td/>
</xsl:if>
<td>
<xsl:value-of select="@Id"/>
</td>
</tr>
</xsl:template>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.