2016-07-28 8 views
1

ファミリーツリーを表す男性と女性のSitecoreコンテンツツリー(各自のテンプレートを持つ各セックス)を指定すると、親はSitecoreクエリを使用してJackと呼ばれていませんでしたか?Sitecoreのクエリの構文:親が呼び出されていない子孫をすべて選択します。

コンテキスト:私のコンテキストアイテムはBobの子供の1つです。私の質問はボブ自身を返すべきではない。ボブには何百もの兄弟がいて、何千もの子孫がいて、自分の結果に表示したくないのです。

  • ボブ
    • サラ
      • ジム
      • ジュリー
    • ジョン
      • スー
      • ジャック
        • アン
    • ジャック
      • クレア
        • メアリー

クエリは返されます:Sarah、Julie、Sue、Mary、AnneまたはClaireは返されません。

私はボブのすべての女性の子孫を選択することができます。]ここ

..//*[@@templateid='{insert女性のテンプレートID} '

をしかし、どのように、私は親の名前を追加します!=ジャック句?あなたはそれ自体で人を表すものではありませんでした「家族の根」ノードを持っていた場合

+0

クエリでなければならないのですか、またはインデックスもオプションで使用していますか? – Gatogordo

答えて

3

、あなたはこれを行うことができます:あなたのケースでは

/path/to/family root//*[@@name != 'Jack']/*[@@templateid = '{template id}'] 

は、あなたが唯一の特定の人の子孫が返されることにしたいです。その人自身が結果セットに含まれるべきではありません。その場合、あなたのコメントからのアプローチは次のようになります。

..//*[../@@name != 'Jack' AND @@templateid = '{template id}'] 

直接の親がJackと呼ばれていないため、両方のクエリの結果にMaryが含まれます。

+1

Sarahも除外していませんか?私のテストでは、子孫の子供を選ぶようです。 ..//*[../@@!= 'Jack' AND @@ templateid = '{ここに女性のテンプレートIDを挿入}']レコードについては、実際にはボブの子供、したがって.. /クエリの開始時。 –

+0

@JamesWalfordああ、私はあなたが 'Bob'の文脈でそれを実行していると思っていたし、' ..'はルートノードを得ることだった。 –

+0

だから、私のやり方は、あなたが人を代表していない基本ノードを持っている場合にのみ動作します。ベースノードが人である場合でも、あなたの方法は機能します。 –

関連する問題