2016-07-28 23 views
1

给定一个表示家族树的男性和女性(每个性别都有自己的模板)的Sitecore内容树,如何选择项目的所有女性后代父母不是使用Sitecore查询调用Jack的?Sitecore查询语法:选择所有未被调用的父母的女性后代Jack

上下文:我的上下文项是Bob的孩子之一。我的查询不应该返回Bob自己。鲍勃还有数百个拥有数千名后代的兄弟,我真的不希望出现在我的结果中。

  • 鲍勃
    • 萨拉
      • 吉姆
      • 朱莉
    • 约翰
      • 杰克
        • 安妮
    • 杰克
      • 克莱尔
        • 玛丽

查询应该会返回:莎拉,朱莉,苏和玛丽,但不是安妮或克莱尔。

我可以选择鲍勃的所有女性后代:

..//*[@@templateid='{insert女模板ID这里}']

但我怎么添加父名!=杰克子句?

+0

是否必须是查询或使用索引也是一个选项? – Gatogordo

回答

3

如果你有这样的本身并不代表一个人的“家庭根”节点,你可以这样做:

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

在你的情况,你想只能返还某个人的后裔。这个人本身不应该被包含在结果集中。在这种情况下,从您的评论的做法是要走的路:

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

两个查询的结果将包括玛丽,因为她的直接父不叫杰克。

+1

那也不排除莎拉吗?在我的测试中,似乎是在选择后代的孩子。我最终使用..//*[../@@name!='Jack'AND @@ templateid ='{insert female template id here'']为了记录,我实际上正在运行查询鲍勃的孩子们,因此在查询开始时../。 –

+0

@JamesWalford哦,我以为你在'Bob'的环境中运行它,而'''是为了得到根节点。 –

+0

所以是的,只有当你有一个不代表一个人的基节点时,我的方式才能工作。即使基节点也是一个人,你的方式仍然可行。 –