尝试为每个节点的每个父节点时遇到问题。我有这样的 XML:
<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>