更改节点之间的导航(XSLT)

时间:2010-06-18 17:17:58

标签: xml xslt

我有一个包含三个行业的菜单和一个“有效”选项:

<ul>
<li id="p_active"><a href="active.xml">Active</a></li>
<li id="p_education"><a href="education.xml">Education</a></li>
<li id="p_energy"><a href="energy.xml">Energy</a></li>
<li id="p_services"><a href="services.xml">Services</a>
</li>
</ul>

每个行业内都有许多公司,另外,每个公司都是“有效”或“无效”。

进入公司页面后,会有BACK和NEXT按钮,这些按钮将通过公司的主列表导航到该行业内相应的相邻公司。

(即公司ABC在教育行业,因此在他们的页面上,Back和Next将转到教育行业内的其他公司)。我在XSLT中完成了这个:

<xsl:choose>
    <xsl:when test="(company[@ind='Education'])">
    <xsl:value-of select="document('invest-port.xml')/portfolio/company[name=$name]/following-sibling::company[@ind='Education'][1]/link"/>
</xsl:when>
    <xsl:when test="(company[@ind='Energy'])">
    <xsl:value-of select="document('invest-port.xml')/portfolio/company[name=$name]/following-sibling::company[@ind='Energy'][1]/link"/>
</xsl:when>
</xsl:choose>

示例公司XML文件:

<fragment>
    <company ind="Education" stat="Active">Company ABC</company>    
    <hq>Boston, MA</hq>
    <desc>This company makes products for schools</desc>
</fragment>

这可以使用Industry作为默认排序键,基于我编写的代码。我的问题是这样的:当用户点击菜单中的“ACTIVE”时,我想这样做,Back和Next按钮将浏览@ Status =“Active”属性,INSTEAD of Industry。

最好的方法是什么?我看了很多不同的解决方案,但我似乎无法弄清楚这样做的最好方法......谢谢!

1 个答案:

答案 0 :(得分:0)

首先,我会尝试摆脱choose并尝试使用变量代表所选行业:

company[@ind = $ind]

然后,设置choose以确定您将找到下一个/上一个公司的方式。

<xsl:choose>
    <xsl:when test="$selectionMethod = 'Active'">
        <xsl:value-of select="document('invest-port.xml')/portfolio/company[name=$name]/following-sibling::company[@stat='Active'][1]/link"/>
    </xsl:when>
    <xsl:otherwise>
        existing code
    </xsl:otherwise>
</xsl:choose>