我已經發布了another question作爲其中的一個方面。我被告知要澄清這個問題,但是這個問題已經很長很複雜了,所以我創建了一個新問題。XSLT2:如何在XPath2謂詞中引用有關當前節點的屬性
我想知道是否有在一個又一個的XPath表達式測試引用當前節點的屬性的標準方式。
對於一個例子,考慮下面的XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="potato/stem[eye]">
In session <xsl:value-of select="@sessionID"/>, the potato had <xsl:value-of select="/potato/stem[@[email protected]][scc]/scc/@leafnumber"/> s.c.c. leaves.
</xsl:for-each>
</xsl:template>
(在這個問題的底部XML源。) (注意,類型的幹[眼]的換每個引用節點,但請求的第二個值引用類型爲stem [scc]的節點,它們位於源XML樹的不同分支上。)
顯然,「@ sessionID = @ sessoinID」部分基本上沒有意義,因爲XPath認爲這是「T他的節點的sessionID屬性的值應該等於節點的sessionID屬性的值。「
但是我想說的是「測試以確保該節點(XPath表達式中的那個)的seesionID屬性的值與任何/ stem [eye]節點的節點ID相同我現在在。「
我不能用變量來做這件事,因爲你不允許在for-each子句中聲明一個變量。
僅供參考,這是XML源代碼。它的結構不是人們想要的,但是我必須與之合作。
<?xml version="1.0" encoding="utf-8"?>
<potato>
<stem sessionID="1">
<eye number = "25"/>
</stem>
<stem sessionID="3">
<eye number = "33"/>
</stem>
<stem sessionID="1">
<scc leafnumber = "234" />
</stem>
<stem sessionID="2">
<scc leafnumber = "433"/>
</stem>
<stem sessionID="3">
<scc leafnumber = "463"/>
</stem>
<stem sessionID="1">
<agd leafnumber = "154"/>
</stem>
<stem sessionID="2">
<agd leafnumber = "233"/>
</stem>
<stem sessionID="3">
<agd leafnumber = "113"/>
</stem>
</potato>
我在尋找的輸出是:
在會話1,馬鈴薯有234 s.c.c.樹葉。
在會議3中,馬鈴薯有463 s.c.c.樹葉。 (當然,這只是沙箱的例子,我意識到可能有簡單的方法來以完全不同的方式完成上述輸出,但我希望這個例子能夠解決我的問題,即如何使用關聯的值與當前節點(例如,在for-each中)作爲XPath的謂詞來搜索另一個節點。)
哇,我也不知道「key」。 Shessh!我有一本蹩腳的書。我還需要更多地研究範圍變量。這非常有幫助。 –
@DavidR:不客氣。順便說一句,我在我的答案中糾正了一個錯字 - 錯過了key()例子中的第二個參數。現在可以。 –
太棒了!謝謝!! –