XSLT professional site
  首 页 经典书籍 精彩实例 热门文章 语法详解 休闲天地  
题目:

<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>
<上一篇    下一篇>
Email: xslt.org.cn@gmail.com

© 2007     xslt.org.cn