2010-12-02 77 views
4

我正在使用非常通用的XML結構,其中一切都是一個項目(無論如何,這個問題都與這個問題有關)。如何找到具有特定屬性的元素的子元素的祖先或自我?

基於知道我當前正在使用的item元素和作爲正在查找的節點的父節點的item元素,我需要找到一個項目。我有一個工作xpath,但它是相當資源密集型的,我正在尋找更優雅和更便宜的東西。

上述項目鍵=一個節點就是我要找的(雖然這不是真正的文檔根目錄的孩子)

XML元素的父:

<root> 
    <item key="a"> 
     <item key="b"> 
      <item key="c"> 
       <item key="d"/> 
      </item> 
     </item> 
     <item key="e"> 
      <item key="f"> 
       <item key="g"/> 
      </item> 
     </item> 
    </item> 
</root> 

實際的XML是更深和更多的分支。例如,如果我在key = g,e或f的項目上,我需要返回key = e的項目。如果我使用的鍵是b,c或d,我需要使用key = b返回項目。

我正在使用這個xpath,它正在工作,但是往上走,然後退回祖先 - 後裔軸似乎比我需要的行程長得多。

current() 
    /ancestor-or-self::item[@key='a'] 
     /item[descendant-or-self::* = current()] 

是否有這樣做的一個簡單的方法,牢記我只知道1)我在節點和2)我要尋找的節點的父節點的關鍵屬性?

只是爲了細節:XML是Sitecore生成的,我實際上沒有使用current()函數,我使用sc_currentitem參數來設置我需要開始處理的起始節點。

在此先感謝。

+0

看起來很簡單,已經(在我的眼睛)。我見過很多可怕的XPath。 – jwueller 2010-12-02 23:54:53

+0

這不是複雜性,而是它處理XML的深度,這很可怕。我正在尋找的節點的父節點可能有大量的子節點/子節點,我真的不想每個分支都停下來。 – 2010-12-03 00:14:06

回答

6

用途:

ancestor-or-self::*[parent::item[@key='a']] 
相關問題