2011-11-04 76 views
0

XML:XSLT和XPath问题

<root> 
<events> 
    <event id="e1" v_id="v1"> 
     <elements></elements> 
    </event> 
    <event id="e1" v_id="v2"> 
     <elements></elements> 
    </event> 
    <event id="e1" v_id="v2"> 
     <elements></elements> 
    </event> 
</events> 

<venues> 
    <venue venue_id="v1"> 
     <venue_name></venue_name> 
     <elements></elements> 
    </venue> 
    <venue venue_id="v2"> 
     <venue_name></venue_name> 
     <elements></elements> 
    </venue> 
</root> 

XSLT:

<xsl:template match="/"> 
     <xsl:apply-templates select="/root/events/event"/> 
    </xsl:template> 
    <xsl:template match="event"> 
     <xsl:value-of select="/root/venues/venue[@venue_id = /root/events/event/@v_id]/venue_name"/> 
     <xsl:text>This is where I would like to put the venue name as a link to that venue</xsl:text> 
    </xsl:template> 

所以如果v_id = V2和venue_id = V2我想从会场与ID显示venue_name的价值= V2

感谢

+0

为什么在你的XML不同的开始和结束标记<部件1 v_id = “V1” E_ID = “E4”> damluar

+0

XML: 根 Child1 Child1.1 Child1.2 CHILD2 Child2.1 2.1Name Child2.2 –

+2

'venue_name'是空的无处不在 - 为什么大惊小怪呢?请编辑您的问题并提供有意义的数据。不要指望回答者为你做你的工作! -1。 –

回答

0

这正是那种键被设计来处理问题。

在样式表的根,加

<xsl:key name="venue" match="venue" use="@venue_id" /> 

这有效地声明所有venue元素,收录在他们的venue_id属性的关联数组。通过此功能,您可以使用key函数获得具有任何给定venue_id属性的venue元素。我相信你能实现你用这个替换您的<xsl:text>线需要的东西:

<xsl:value-of select="key('venue', @v_id)/venue_name" /> 

这本质上查找正确的venue元素,并得到其中的venue_name孩子。

+0

非常感谢。我是整个论坛的新手,如果我的问题有点含糊,我很抱歉。再次感谢你完美的作品! –

+0

别担心,这里没有什么模糊的地方。我仍然无法理解为什么有些人看不到'venue_name'元素的内容完全与解决方案无关,我似乎很清楚。 – Flynn1179

+0

我以为我也是。再次感谢。 –