我具有以下XML(簡體)XML輸出爲HTML使用XSL
<?xml version="1.0" encoding="UTF-8"?>
<REPOSITORY>
<VIEW UPDATED_BY="SADMIN">
<VIEW_LOCALE UPDATED_BY="SADMIN"> </VIEW_LOCALE>
<VIEW_WEB_TEMPLATE UPDATED_BY="SADMIN" COMMENTS="TEST COMMENT">
<VIEW_WEB_TEMPLATE_ITEM UPDATED_BY="SADMIN"></VIEW_WEB_TEMPLATE_ITEM>
</VIEW_WEB_TEMPLATE>
</VIEW>
<VIEW UPDATED_BY="USER">
<VIEW_LOCALE UPDATED_BY="USER"> </VIEW_LOCALE>
<VIEW_WEB_TEMPLATE UPDATED_BY="USER">
<VIEW_WEB_TEMPLATE_ITEM UPDATED_BY="USER"></VIEW_WEB_TEMPLATE_ITEM>
<VIEW_WEB_TEMPLATE_ITEM UPDATED_BY="USER2"></VIEW_WEB_TEMPLATE_ITEM>
</VIEW_WEB_TEMPLATE>
</VIEW>
</REPOSITORY>
我需要遍歷這個XML並打印輸出HTML表格。下面是XSL我想出了
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match ="/" >
<html><head></head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="/" >
<xsl:for-each select="REPOSITORY/VIEW">
<table>
<tr>
<td>Updated By</td>
<td><xsl:value-of select="@UPDATED_BY" /></td>
</tr>
</table>
<xsl:if test="./VIEW_WEB_TEMPLATE">
<table>
<tr><td>Updated By</td><td>Comments</td></tr>
<xsl:for-each select="*[name()='VIEW_WEB_TEMPLATE']">
<tr>
<td><xsl:value-of select="@UPDATED_BY" /></td>
<td><xsl:value-of select="@COMMENTS" /></td>
</tr>
</xsl:for-each> <!-- end of view_web_template -->
</table>
<xsl:if test="./VIEW_WEB_TEMPLATE_ITEM">
<table>
<tr><td>Updated by</td></tr>
<xsl:for-each select="./VIEW_WEB_TEMPLATE_ITEM">
<tr>
<td><xsl:value-of select="@UPDATED_BY" /></td>
</tr>
</xsl:for-each> <!-- end of web_template_item -->
</table>
</xsl:if>
</xsl:if>
</xsl:for-each> <!-- end of view -->
</xsl:template>
</xsl:stylesheet>
我知道這可能不是做的最好的方式,但我沒能獲得在表中的VIEW_WEB_TEMPLATE_ITEM節點的數據。 if條件失敗。
我懷疑這可能是由於該VIEW_WEB_TEMPLATE節點已被處理,由於換每個事實。
所以我XPATH應該如果先前處理的節點有子,然後選擇它但我足夠我不是專家在XSLT爲了能夠做到這一點。 任何指針??
謝謝,這工作完美。我無法在內部使用它,因爲它需要獨立的表格。所以我改變了if和select子句。 – Neel