Sitecore查询如何选择具有特定父ID的项目

时间:2017-02-21 14:35:43

标签: c# sitecore sitecore8

我想选择一个父亲拥有id = xx的项目。

我正在使用此查询:

 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
      • B1
      • B2

从A1或A2我想得到A,如果上下文项是B1或B2,我想得到项B.这只是一个例子,树可以更深。

2 个答案:

答案 0 :(得分:0)

我不记得正确的Xpath语法,但可能类似于:

(pageID:3 Key:18)

"./../[./../../[@id = '{E3C35E4C-B3D9-4153-B53E-E4004E76D768}']]" 使用[]作为" if语句",

./../ <-- one step up ( A / B )

所以基本上,如果父节点的当前节点是X,则选择当前节点父节点。

语法正确关闭,但心态可能有所帮助。祝你好运

答案 1 :(得分:0)

正如Gatogordo在评论中所说,Sitecore查询语言没有dashboard.controller('excelreportController',function($scope,$html){ $scope.inverters = [ { "InvDetails": "UPS", "LstRecords": [ { "Id": 1, "Invertor_Id": 1, "Time_of_Reading": "20170214", "Lastreading": 0, "Readingby": 0 }, { "Id": 87, "Invertor_Id": 1, "Time_of_Reading": "20170215", "Lastreading": 5, "Readingby": 10 }, { "Id": 110, "Invertor_Id": 1, "Time_of_Reading": "20170216", "Lastreading": 10, "Readingby": 92 }, { "Id": 111, "Invertor_Id": 1, "Time_of_Reading": "20170216", "Lastreading": 92, "Readingby": 95 } ] }, { "InvDetails": "Power Supply", "LstRecords": [ { "Id": 2, "Invertor_Id": 2, "Time_of_Reading": "20170214", "Lastreading": 0, "Readingby": 0 }, { "Id": 88, "Invertor_Id": 2, "Time_of_Reading": "20170215", "Lastreading": 7, "Readingby": 13 }, { "Id": 109, "Invertor_Id": 2, "Time_of_Reading": "20170216", "Lastreading": 13, "Readingby": 25 }, { "Id": 112, "Invertor_Id": 2, "Time_of_Reading": "20170216", "Lastreading": 25, "Readingby": 49 } ] } ]; $scope.exportData = function () { var data = ""; $scope.headers = []; angular.forEach($scope.inverters, function (value, key) { var we = value.InvDetails; $scope.headers.push(we); $scope.last = value.LstRecords; angular.forEach($scope.last, function (value, key) { data = { "Id": value.Id, "Invertor_Id": value.Invertor_Id, "Time_of_Reading": value.Time_of_Reading, "Lastreading": value.Lastreading, "Readingby": value.Readingby }; }) }) $scope.result = []; $scope.result0 = []; $scope.result.push({ "Invertor": JSON.stringify(data) }) alasql('SELECT * INTO XLSX("john.xlsx",{headers:true}) FROM ?', [$scope.result]); }; 的特殊属性。您可以使用@@parentid作为轴,但与您对XPath的期望相比,它的行为很奇怪,所以我倾向于避免使用它。

匹配我所知道的项目的核心属性的有效选项是:

Valid options

“查找合适的父项”最常见的模式可能是根据其模板找到正确的项目。通过模板查找内容可以使您的代码更加灵活 - 如果特定项目被销毁并重新创建(这将更改其ID),并且如果使用相同模板创建新内容,它将继续工作。

您的查询可能类似于parent:: - 但假设A和B具有不同的模板。如果它们都具有相同的模板,则可以删除第二个ancestor::*[@@templateid='{template-guid-for-A-here}' or @@templateid='{template-guid-for-B-here}']子句。 (或者,如果您愿意,也可以在此处使用@@templateid)如果您希望查询能够处理A&amp; B项目以及Ax&amp; Bx,您也可以在此处使用@@templatename轴。