2017-02-21 20 views
0

我想選擇父母擁有id = xx的項目。Sitecore查詢如何選擇具有某個父母標識的項目

我使用此查詢:

var mainSectionItem = 
      Sitecore.Context.Item.Axes.SelectSingleItem("./ancestor::*[@@parentid = '{E3C35E4C-B3D9-4153-B53E-E4004E76D768}']"); 

,但我得到空。在上面的代碼中,當我將@@parentid更改爲@@id時,我得到MainItem。只是爲了澄清這是我在做什麼:

  • MainItem [ID = {E3C35E4C-B3D9-4153-B53E-E4004E76D768}]
    • 一個
      • A1
      • A2
    • B
      • B1
      • B2

從A1或A2我想獲得一個,如果上下文項是B1或B2我想獲得項目B.這只是一個例子,樹可以更深入。

+0

@@的parentid是不是一個有效的屬性..你不能使用TEMPLATENAME(或ID)? – Gatogordo

回答

0

我不記得正確的XPath語法,但也許是這樣的:

"./../[./../../[@id = '{E3C35E4C-B3D9-4153-B53E-E4004E76D768}']]"

./../ <-- one step up (A/B) 使用[]作爲一個 「if語句」,

[./../..] - A1/A/MainItem[Who has X as ID] 

所以basicly ,選擇當前節點父節點,如果當前節點父節點父節點是X.

語法正確關閉,但心態可能會有所幫助。祝你好運

0

正如Gatogordo在評論中所說,Sitecore查詢語言沒有@@parentid的特殊屬性。您可以使用parent::作爲座標軸,但與XPath期望的相比,它的行爲有些奇怪,所以我傾向於避免它。

匹配我所知道的一個項目的核心屬性有效的選項有:

Valid options

爲「找到一個合適的父項」可能是基於尋找合適的項目的最常見的模式在其模板上。通過模板查找內容會使代碼更加靈活 - 如果特定項目被破壞並重新創建(這會更改其ID),並且如果使用相同模板創建新內容,則它會繼續工作。

您的查詢可能類似於ancestor::*[@@templateid='{template-guid-for-A-here}' or @@templateid='{template-guid-for-B-here}'] - 儘管假設A和B具有不同的模板。如果他們都具有相同的模板,則可以刪除第二個@@templateid子句。(或者,您也可以使用@@templatename在這裏,如果你喜歡)你也可以在這裏使用ancestor-or-self::軸,如果你想查詢到在A &乙項目工作,以及斧& Bx的。

相關問題