c#
  • sitecore
  • sitecore8
  • 2017-02-21 30 views 0 likes 
    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

    От А1 или А2 Я хочу, чтобы получить, и если контекст элемент B1 или B2 Я хочу, чтобы получить пункт B. Это просто пример, дерево может быть более глубоким.

    +0

    @@ parentid не является допустимым атрибутом .. Вы не можете использовать templatename (или id)? – Gatogordo

    ответ

    0

    Я не помню правильный синтаксис Xpath, но, возможно, что-то вроде:

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

    ./../ <-- one step up (A/B) Используйте [], как "если заявление",

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

    Так основно , Выберите текущий родительский узел, если текущий родитель родителей родителей равен X.

    синтаксис должным образом выключен, но менталитет может помочь. Удачи

    0

    Как говорит Gatogordo в комментариях, язык запросов Sitecore не имеет специального атрибута для @@parentid. Вы можете использовать parent:: в качестве оси, но он ведет себя странно по сравнению с тем, что вы ожидаете от XPath, поэтому я стараюсь избегать этого.

    действительные параметры для сопоставления основных атрибутов элемента я знаю, являются:

    Valid options

    Наиболее распространенный шаблон для «найти соответствующий родительский элемент», вероятно, найти правильный элемент на основе по его шаблону. Поиск элементов по их шаблону делает ваш код более гибким - он продолжает работать, если конкретные элементы будут уничтожены и заново созданы (что изменит их идентификаторы), а также если новый контент будет создан с теми же шаблонами.

    Ваш запрос, вероятно, что-то вроде ancestor::*[@@templateid='{template-guid-for-A-here}' or @@templateid='{template-guid-for-B-here}'] - хотя это предполагает, что A и B имеют разные шаблоны. Если они оба имеют один и тот же шаблон, вы можете удалить второй пункт @@templateid.(В качестве альтернативы вы также можете использовать @@templatename здесь, если хотите). Вы также можете использовать ось ancestor-or-self::, если хотите, чтобы запрос работал на A & B, а также Ax & Bx.

     Смежные вопросы

    • Нет связанных вопросов^_^