От новичка до гуру: Курсы программирования на 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
    Новые материалы

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..

    Как работает дистанционное парное программирование и почему оно может изменить вашу жизнь
    Серебряная пуля от одиночества и отвлекающих факторов во время обучения программированию Независимо от того, работаете ли вы или учитесь удаленно, велика вероятность, что одиночество и..

    🔥🔥👉Питон 🆚Javascript👈🔥🔥
    Сегодня Python и Javascript потрясают мир в области ИТ. Все хотят выучить Python и Javascript, чтобы получить высокооплачиваемую работу. Различные фреймворки Python и Javascript расширяют..