2011-11-04 75 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

我以爲我也是。再次感謝。 –