2014-01-26 27 views
2

我正在處理文檔中的節點列表,一次一個節點。如何在主文檔中找到一個屬性值等於當前所選節點屬性值的節點

在該處理過程中,我需要使用正在處理的節點的本地屬性的值從更寬的文檔中選擇節點。

我希望在單個XPath中表達這一點。

如果我第一次得到本地屬性值,我可以將它插入到xpath中,但我不希望這樣做,因爲我希望Xpath是自包含的。

以下文檔是一種結構類型的示例,但僅供說明。

<root> 
    <pageGenre> 
     <page ref="attvalue1"/> 
     <genre>horror</genre> 
    </pageGenre> 
    <pageGenre> 
     <page ref="attvalue1"/> 
     <genre>thriller</genre> 
    </pageGenre> 
    <pageGenre> 
     <page ref="attvalue2"/> 
     <genre>cooking</genre> 
    </pageGenre> 
    <book att="attvalue1"> 
     <author>Lovecraft</author> 
    </book> 
    <book att="attvalue2"> 
     <author>E.E. Smith</author> 
    </book> 
</root> 

我第一次從文檔中找到我的節點列表有:

.//book

然後對每本書節點,我使用節點然後得到的att

./@att

它每次都有效。

我想要做的就是通過單個Xpath獲取本書的所有頁面風格。

我曾嘗試:

// pageGenre /頁[@ref = ./@att]/../genre

這是不行的,來了空白。

如果我使用

[@ref = // @ ATT]

我剛剛得到的所有類型的所有書att S上的文件內。

如果我首先解決./@att值然後編寫我的Xpath,它工作正常,但我不想「知道」這需要完成,因爲我希望XPath的列表在沒有任何特殊的情況下運行使用通用調度程序的案例。

我也嘗試過self::/@att,但這和./@att一樣,正如人們所期望的那樣。

任何想法非常感謝。

+0

,所以你要選擇的''''具有ref屬性值等於..?請繼續判刑。我不能清楚地瞭解你正在嘗試從XML – har07

+0

得到我想要有等於當前book節點的ATT ref屬性值來選擇的。 –

+0

因爲書節點在不同的樹,我不能讓你通過*當前圖書節點*的意思是什麼(很顯然,如果''節點在同一棵樹作爲'')。通過修復xml結構順利移動。 – har07

回答

0

您希望從單個節點啓動XPath查詢並對其進行反向引用(以獲取值att),但在函數中沒有bulit。以下問題是有點確認。

「我可以看到完成您在註釋中描述的內容的唯一方法是使用LINQ to XML,XPath變量或定義您自己的current()函數」。[.NET XPath starting from a specific element and backreferencing to it]

而且我們的試一下:

//pageGenre/page[@ref = ./@att]/../genre 

因爲./@att是選擇att屬性相對於當前節點,這是<page>而不是<book>沒有工作。要引用該部分中的<book>節點,您需要使用current()函數。

最後,解決方案是實現上述鏈接中提供的3種方法之一,或者如果所有這些方法都過於複雜/過度消耗,只需在每個開頭保存att的值迭代。

+1

感謝您的鏈接 - 我會看看我是否可以利用VariableContext路線。 –

相關問題