我尝试为每个节点的每个父节点都有问题。我有这样的XML:xsl祖先或自我不返回结果
<item name="news" id="77"> <items> <item id="102" /> <item id="103" /> </items> </item> <item id="86"> <items> <item id="122"> <items> <item id="6" /> <item id="9" /> </items> </item> <item id="12"> <items> <item id="13" /> <item id="18" /> <item id="19" /> </items> </item> </items> </item> <item name="sitemap" id="88" />
而且在模板中我尝试这样的:
<xsl:template name="render">
<xsl:param name="length" />
<xsl:param name="item" />
<xsl:for-each select="ancestor-or-self::item[@id='9']">
some code
</xsl:for-each>
<xsl:apply-templates select="*"/>
请帮助我,如果你能。
UPD:
我希望得到一些像菜单(如果选用带有ID选项= 9):
<ul>
<li>77</li>
<li>
86
<ul>
<li>
122
<ul>
<li>6</li>
<li>9</li>
</ul>
</li>
<li>12</li>
</ul>
</li>
<li>88</li>
</ul>
我的XSLT(我想想)不好:
<xsl:template match="/">
<ul>
<xsl:call-template name="render">
<xsl:with-param name="item" select="item[@id='9']" />
<xsl:with-param name="length" select="0" />
</xsl:call-template>
</ul>
</xsl:template>
<xsl:template name="render">
<xsl:param name="length" />
<xsl:param name="item" />
<xsl:for-each select="$item/ancestor-or-self::item[@id='9']">
<xsl:if test="position()=length">
<xsl:variable name="current" select="." />
<xsl:for-each select="../item">
<xsl:choose>
<xsl:when test=".=current">
<li class="selectedItem">
<p>
<xsl:value-of select="@id"/>
</p>
<xsl:call-template name="render">
<xsl:with-param name="length" select="$lenght + 1" />
<xsl:with-param name="item" select="$item" />
</xsl:call-template>
</li>
</xsl:when>
<xsl:otherwise>
<li>
<p>
<xsl:value-of select="@id"/>
</p>
</li>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
<xsl:apply-templates select="*"/>
</xsl:template>
你的问题不是特别清楚,更多的是一个声明,而不是一个问题。你能更具体一些吗?特别是,你正在寻找什么样的输出。 – freefaller 2013-05-14 15:33:01
调用'render'模板时的当前节点是什么?你能向我们展示一些你的XSLT吗? – JLRishe 2013-05-14 16:29:06