От новичка до гуру: Курсы программирования на CyberDuff

Получение родителя родителя из текущего узла в Xpath 2.0

Кажется, у меня всегда возникают проблемы с выражениями оси xpath...

В некоторых выражениях я использовал ../ для ссылки на родительский узел, но разве это недопустимо для выражений test? Или мой синтаксис просто неверен?

<xsl:when test="../../[@status='current']">

Моя цель - применить атрибут внутри xsl:when IF родительского родителя имеет атрибут состояния со значением «текущий».

РЕДАКТИРОВАТЬ: self::parent/parent[@status='current'] является допустимым выражением xpath и может быть тем, что я хочу, может ли кто-нибудь подтвердить? Я мог бы не идти достаточно далеко.

06.08.2012

Ответы:


1

Проблема в /[. Вы можете изменить его на

../../self::*[@status='current']
06.08.2012
  • Это сделало это. Не могли бы вы пояснить мое непонимание? Насколько я понимаю, ../../ выбирает родителя родителя, а [@status] затем выполняет проверку атрибута состояния этого элемента. 06.08.2012
  • @meder: / разделяет шаги, поэтому он не может стоять перед предикатом (часть [...]). 06.08.2012
  • Правильно, элемент не [], это * (и [] просто объясняет атрибут и значение, которое должен иметь элемент *) 07.08.2012

  • 2

    Более простое решение, чем у choroba и Hansen,

    ../..[@status='current']
    
    06.08.2012
  • Клянусь, я пробовал это, и, если мне не изменяет память, это не удалось из-за неправильного выражения, но логически это работает в моем уме. 07.08.2012
  • Согласитесь, что это самое простое. С XSLT/XPath 1.0 oXygen сообщает о следующей ошибке проверки: E [Saxon6.5.5] Error in expression ../..[@status='current']: Unexpected token [ beyond end of expression, но все еще работает при фактическом выполнении преобразования. Отлично проверяется как XSLT/XPath 2.0. 07.08.2012
  • Я вспомнил, что XPath 1.0 не разрешал предикат после ., но я забыл, что он не разрешал его и после ... Совершенно бессмысленное ограничение, снятое в 2.0. В версии 1.0 замените .. на parent::node(). 10.08.2012

  • 3

    Вы также можете использовать следующее:

    parent::*/parent::*[@status='current']
    
    06.08.2012
  • Здорово. Жаль, что массивы PHP не могут этого сделать. 10.11.2014

  • 4

    С Xpath 2.0:

     ../../@status eq 'current'
    

    С XPath 1.0 и XPath 2.0:

     ../../@status = 'current'
    
    07.08.2012
    Новые материалы

    Пришло время попрощаться с этими устаревшими библиотеками Python
    Поскольку Python продолжает развиваться, некоторые библиотеки, которые когда-то широко использовались, устаревают. Эти устаревшие библиотеки могут вызывать проблемы совместимости, уязвимости в..

    Привет, Зак Аргайл, сначала позвольте мне поблагодарить за эту статью, но я не думаю, что все ваши примеры…
    Привет, Зак Аргайл, сначала позвольте мне поблагодарить за эту статью, но я не думаю, что все ваши примеры компаний, которые придерживаются устаревших кодовых баз, написанных в таких фреймворках,..

    Быстрый хак: реализация семантики вызова метода в C
    C — процедурный язык, минималистичный и лишенный объектной семантики. Вместо этого у вас есть структуры, функции (процедуры) и указатели. Вы можете использовать их для реализации чего-то похожего..

    Разоблачение роли «старшего инженера» [Часть 1]
    Я только начал работать в Andela в новой должности старшего инженера-программиста, и должен признать, что до сих пор это была одна из моих лучших поездок. В Andela наша миссия состоит в том,..

    Как настроить автоматические перенаправления в вашем приложении React
    В сегодняшней статье я покажу вам, как настроить автоматическое перенаправление на защищенную/ограниченную страницу в вашем приложении реагирования после аутентификации пользователя. ВВЕДЕНИЕ..

    Освойте обещания JavaScript — Полная серия
    Полную серию видео смотрите по ссылке: https://youtube.com/playlist?list=PLbXAYqhxhzxxenzSiFcTMpeJ_VqX5D7KH Не забудьте подписаться, чтобы получать отличный контент и в будущем. Мы находимся в..

    Leetcode — 128 самая длинная последовательная последовательность
    Учитывая несортированный массив целых чисел nums , вернуть длину самой длинной последовательности последовательных элементов. Чтобы решить эту проблему, мы сохраняем текущий последовательный..