2012-06-14 103 views
2

我熟悉在XSLT中使用preceding axes來確定給定當前上下文的前面元素的數量。然而,我沒有看到一種方法來做同樣的節點,我已經存儲在一個變量中。例如:XPath 1.0:查找指定節點之前的節點數

<xsl:variable name="matchedBook" select="book[text()='The Hobbit']"/> 
<xsl:variable name="precedingBookCount" select="count(???)"/> 

給出下面的XML,precedingBookCount應該等於3

<available> 
    <book>Lord of the Rings</book> 
    <book>The Hunger Games</book> 
</available> 
<purchased> 
    <book>Ready Player One</book> 
    <book>The Hobbit</book> 
    <book>Lord of the Flies</book> 
</purchased> 

我XPath 2.0中看到,有一個NodeComp operator<<,我可以用,但是這似乎並沒有被存在於XPath 1.0中。

那麼我該如何去做XPath 1.0呢?

+0

MattHuggins:如果某些「之前」元素可以是當前元素的祖先,那麼您需要一個不同的解決方案。我知道這可能不是您的具體情況,但如果您有興趣知道如何做到這一點,請提出問題。 –

+0

@DimitreNovatchev - 幸運的是,我的具體問題並非如此。感謝您伸出援手! –

回答

2

<xsl:variable name="precedingBookCount" select="count($matchedBook/preceding-sibling::book | $matchedBook/preceding::book)"/>應該做的。

其實它只需要做<xsl:variable name="precedingBookCount" select="count($matchedBook/preceding::book)"/>

+0

完美,非常感謝! :) –

+1

實際上'之前'包含'之前的兄弟姐妹',所以它可以被簡化,請參閱編輯。 –

+0

我這麼認爲。感謝您確認我的懷疑。 ;) –