[经验总结]XSLT中判断结点类型

<?xml version="1.0"?>

<!--以下代码摘自XSLTSL工程-->

<!--XSLT中判断XML文档的结点类型 -->

 

<xsl:stylesheet version="1.0"

    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

    xmlns:doc="http://xsltsl.org/xsl/documentation/1.0"

    xmlns:node="http://xsltsl.org/node"

    extension-element-prefixes="doc node">

 

  <xsl:template name="node:type">

    <xsl:param name="node" select="."/>

 

    <xsl:choose>

      <xsl:when test="not($node)"/>

      <!------------------------------------------------------------------->

      <!--运用了self-->

     

      <xsl:when test="$node[1]/self::*">                     <!--元素结点-->

           <xsl:text>element</xsl:text>

      </xsl:when>

 

      <xsl:when test="$node[1]/self::text()">                <!--文本结点-->

           <xsl:text>text</xsl:text>

      </xsl:when>

 

      <xsl:when test="$node[1]/self::comment()">             <!--注释结点-->

           <xsl:text>comment</xsl:text>

      </xsl:when>

 

      <xsl:when test="$node[1]/self::processing-instruction()">  <!--处理指令结点-->

    <xsl:text>processing instruction</xsl:text>

      </xsl:when>

      <xsl:when test="not($node[1]/parent::*)">                  <!--根结点-->

        <xsl:text>root</xsl:text>

      </xsl:when>

 

      <!--下面两种类型的判断巧妙运用了集合的概念-->

      <xsl:when test="count($node[1] | $node[1]/../namespace::*) = count($node[1]/../namespace::*)">

        <xsl:text>namespace</xsl:text>

      </xsl:when>

 

      <xsl:when test="count($node[1] | $node[1]/../@*) = count($node[1]/../@*)">

        <xsl:text>attribute</xsl:text>

      </xsl:when>

 

    </xsl:choose>

  </xsl:template>

 

</xsl:stylesheet>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值