如何在xslt中过滤掉标签

时间:2016-12-14 15:44:05

标签: xml xslt

我正在尝试从以下XML生成html。

<students>
   <class action="update">2</class>
   <section action="update">B</class>
 <student>
     <name>ravi</name>
     <skill action="update">badminton</skill>
</student>
<student action="insert">
     <name>gauri</name>
     <skill>tennis</skill>
</student>
</students>

我正在编写一个xsl文件来生成下表。

tag       subtag    action
class               update
section             update
ravi      skill     update
gauri               insert

我的xsl文件看起来像这样。

<xsl:template match="/*">
  <h2>My CD Collection</h2>  
     <table>
      <tr>
        <th>tag</th>
        <th>subtag</th>
        <th>action</th>
      </tr>
     <xsl:for-each select="//*">
       <xsl:choose>
         <xsl:when test="@Action">   
       <tr>
        <td><xsl:value-of select="local-name()"/></td>
         <td></td>
        <td><xsl:value-of select="@Action"/></td>
       </tr>
        </xsl:when>
        <xsl:otherwise>      
         </xsl:otherwise>
      </xsl:choose>
     </xsl:for-each>
</table>
</xsl:template>

但是这会生成下表。

tag       subtag    action
class     update          
section   update          
skill     update          
student   insert          

如何单独处理学生标签。请帮忙。我是XSLT的新手。

1 个答案:

答案 0 :(得分:0)

尝试使用此模板作为启动器

<xsl:template match="/*">
 <table>
     <tr>
        <th>tag</th>
        <th>subtag</th>
        <th>action</th>
     </tr>
     <xsl:for-each select="*">
        <tr>
           <td>
              <xsl:choose>
                 <xsl:when test="name"><xsl:value-of select="name"/></xsl:when>
                 <xsl:otherwise><xsl:value-of select="local-name()"/></xsl:otherwise>
              </xsl:choose>
           </td>
           <xsl:choose>
              <xsl:when test="@action">
                 <td></td>
                 <td><xsl:value-of select="@action"/></td>
              </xsl:when>
              <xsl:otherwise>
                 <td><xsl:value-of select="local-name(*[@action])"/></td>
                 <td><xsl:value-of select="*/@action"/></td>
              </xsl:otherwise>
           </xsl:choose>
        </tr>
     </xsl:for-each>
  </table>
</xsl:template>