我有以下 XML(简体)
<?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节点由于 for-each 已经被处理。
所以我的 XPATH 应该是如果先前处理的节点有子节点然后选择它,但我在 XSLT 方面不够专家能够做到这一点。任何指针?