0

私は次の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 条件が失敗します。

for-each によりVIEW_WEB_TEMPLATEノードが既に処理されていることが原因ではないかと思います。

したがって、以前に処理されたノードに子がある場合、私のXPATHはそれを選択する必要がありますが、私はそれを行うことができるXSLTの専門家ではありません。ポインタはありますか??

4

1 に答える 1