XSLT专业站 - 提供xslt和xml相关的资料书籍和教程  
XSLT专业站 - 提供xslt和xml相关的资料书籍和教程
网站地图  收藏本站
首页 | 热门文章 | 精彩实例 | 经典教程 | XSLT语法详解 | 资料下载 | 休闲天地 | 交流论坛
  当前位置:首页>精彩实例>文章内容
查找公共祖先节点
来源:XSLT.org.cn 作者:XSLT专业站 发布时间:2007-08-04  
查找公共祖先节点

题目:

<root>
    <item id="1" parent="0" />
    <item id="2" parent="1" />
    <item id="3" parent="2" />
    <item id="4" parent="1" />
</root>

查找公共祖先结点

例如得到一个<root id1='4' id2='3' />的XML文件,以及一个 目标示例(Filename:tree.xml).

输出的结果为:1.



实现:


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="searchid" match="item" use="@id"/>
<xsl:template match="/">
  <xsl:call-template name="same-ancestor">
   <xsl:with-param name="id1" select="'3'"/>
   <xsl:with-param name="id2" select="'4'"/>
  </xsl:call-template>
</xsl:template>
<xsl:template name="same-ancestor">
  <xsl:param name="id1" select="'0'"/>
  <xsl:param name="id2" select="'0'"/>
  <xsl:variable name="setstr">
   <xsl:for-each select="key('searchid',$id1)/ancestor-or-self::*">
    <xsl:variable name="tmpid" select="generate-id(.)"/>
    <xsl:if test="not(key('searchid',$id2)/ancestor-or-self::*[generate-id(.)=$tmpid])">
     <xsl:value-of select="../@id"/>--
   </xsl:if>
   </xsl:for-each>
  </xsl:variable>
  <xsl:choose>
   <xsl:when test="$setstr != ''">
    <xsl:value-of select="key('searchid',substring-before($setstr,'--'))/@id"/>
   </xsl:when>
   <xsl:otherwise>
    <xsl:value-of select="$id1"/>
   </xsl:otherwise>
  </xsl:choose>
</xsl:template>
</xsl:stylesheet>


标题: 查找公共祖先节点
关键字:公共祖先节点 Node substring-before ancestor-or-self
上一篇:查找节点的父节点   下一篇:用 XML/XSL 来生成动态页面
  精彩实例热点文章
·XSLT 实例:使用不同的轴(Axis
·利用 xslt 对 xml 进行缩进格式
·XSLT 实例:创建带有“前一页”
·利用 XSL 解析 RSS
·把数据库输表用 XSLT 转化为树状
·查找节点的父节点
·用 XML/XSL 来生成动态页面
·利用 XSL 对 XML 数据进行加密和
·XSLT 实例:统计作者出版物的销
·XSLT 实例:使用变量(Variable)
  精彩实例相关文章
·查找节点的父节点
·用 XML/XSL 来生成动态页面
·把数据库输表用 XSLT 转化为树状
·利用 xslt 对 xml 进行缩进格式
·利用 XSL 解析 RSS
·利用 XSL 对 XML 数据进行加密和
·XSLT 实例:使用不同的轴(Axis
·XSLT 实例:统计作者出版物的销
·XSLT 实例:创建带有“前一页”
·XSLT 实例:使用变量(Variable)
Copyright© 2007 xslt.org.cn All rights reserved.