[英]XPath 2 / XSLT : Find sibling nodes of a set with matching values of child node
我無法在任何地方找到這個問題,我一直在努力解決這個問題。 我希望能夠使用XPath選擇集合中具有子節點值A的所有節點,其中集合中存在具有相同子節點值A的另一個節點,並將它們配對在一起。
例如,我有一個列出電影的XML文檔'imdb'。 這里的節點遵循以下模式:
<movie>
<title>Pirates of the Carribbean: At World's End</title>
<year>2007</year>
<directors>
<director>Gore Verbinski</director>
</directors>
<actors>
<actor>Johnny Depp</actor>
......
</actors>
</movie>
在這個例子中,我想找到所有以Johnny Depp為特色的電影,這些電影與同一部電影同年出現。 在我的輸出中,我正在按年分類 - 所以,對於每年與約翰尼德普有超過兩部電影,我想在那一年和那些電影一起輸出。
到目前為止,我的每個選擇的XSLT看起來像這樣: <xsl:for-each select="/imdb/movie[contains(actors/actor/text(), 'Johnny Depp')][year = following-sibling::movie/year]">
但這似乎只是輸出約翰尼·德普所經歷過的每一部電影。我在這里做錯了什么?
對於每年與約翰尼德普有超過兩部電影的年份,我想和那些電影一起輸出那一年。
那是
<xsl:for-each-group select="movie" group-by="year">
<xsl:variable name="depp-movies"
select="current-group()[actors/actor='johnny depp']"/>
<xsl:if test="count($depp-movies) gt 2">
<year year="{current-grouping-key()}">
<xsl:copy-of select="current-group()"/>
</
</
</
您當前的查詢返回滿足兩個謂詞的每個影片
movie
元素包含一個actor
元素,其字符串值包含'Johnny Depp'。 movie
元素具有同一年的以下兄弟元素。 也就是說,它匹配每個Johnny Depp電影,這部電影不是給定年份中制作的文檔中的最后一部電影。 following-sibling
軸將識別輸入中給定movie
元素的兄弟節點,而不是排序列表中的其他movie
元素。
您應該閱讀xsl:for-each-group
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.