使用此純的XPath 2.0表達式:
/*/Guide
[for $gid in guideID
return ../GuideLang[guideID eq $gid and lname eq 'English']
]
/gname
這假設所提供的文檔片段的節點是(未提供)的XML文檔的(未提供)頂元素的子元素。
這甚至可以被轉換成一個XPath 1.0表達式(注意沒有//
使用!):
/*/Guide
[guideID
=
../GuideLang[lname = 'English']/guideID
]
/gname
更新:
只是對於那些奇怪爲什麼人民羣衆上面的第一個表達式是純XPath 2.0,這裏是一個完整的基於XSLT 2.0的驗證:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<xsl:sequence select=
"/*/Guide
[for $gid in guideID
return ../GuideLang[guideID eq $gid and lname eq 'English']
]
/gname
"/>
</xsl:template>
</xsl:stylesheet>
當該XSLT 2.0變換被應用在以下文獻(所提供的片段,包裝到一個頂部元件):
<t>
<GuideLang>
<guideID>1</guideID>
<lname>English</lname>
</GuideLang>
<GuideLang>
<guideID>2</guideID>
<lname>German</lname>
</GuideLang>
<GuideLang>
<guideID>3</guideID>
<lname>Swedish</lname>
</GuideLang>
<Guide>
<guideID>1</guideID>
<gname>John Smith</gname>
</Guide>
<Guide>
<guideID>2</guideID>
<gname>Weber Schneider</gname>
</Guide>
</t>
中的XPath 2.0表達式求值和正確地選擇的節點是輸出:
<gname>John Smith</gname>
「家庭作業」 - 標誌失蹤? –
這只是我正在閱讀的一本書的「作業」,我認爲如果我知道這個問題的答案,那麼我將能夠弄清楚其餘的問題。 –