То, как использовать XPath, содержит () здесь?

Из Игоря Зевака :

Резюме

Поскольку существует около 4 почти одинаково приемлемых, но разных ответов, я обобщу все различные способы оформления тега.

  1. git rev-list -1 $TAG ( ответ ). git rev-list выводит коммиты, которые приводят к $TAG, аналогично git log, но показывают только SHA1 коммита. -1 ограничивает вывод до коммита, на который он указывает.

  2. git show-ref --tags ( ответ ) покажут все теги (локальные и извлеченные из удаленного) и их SHA1.

  3. git show-ref $TAG ( ответ ) покажет тег и его путь вместе с SHA1.

  4. git rev-parse $TAG ( ответ ) покажет SHA1 аннотированного тега.

  5. git rev-parse --verify $TAG^{commit} ( ответ ) покажет SHA1 как аннотированных, так и аннотированных тегов. В Windows используйте git rev-parse --verify %TAG%^^^^{commit} (четыре шляпы).

  6. cat .git/refs/tags/* или cat .git/packed-refs ( ответ ) в зависимости от того, является ли тег локальным или извлеченным из удаленного.

137
задан abatishchev 3 April 2012 в 11:53
поделиться

2 ответа

Вы просматриваете только первый дочерний элемент li в вашем запросе вместо того, чтобы искать любой дочерний элемент li , который может содержать текст, «Модель» . Вам нужен следующий запрос:

//ul[@class='featureList' and ./li[contains(.,'Model')]]

Этот запрос предоставит вам элементы, которые имеют класс из featureList с одним или несколькими li дочерними элементами. которые содержат текст 'Модель' .

193
ответ дан 23 November 2019 в 23:33
поделиться

Я уже давал +1 к решению Джеффа Йейтса.

Вот краткое объяснение, почему ваш подход не работает. Это:

//ul[@class='featureList' and contains(li, 'Model')]

встречается с ограничением функции contains () (или любой другой строковой функции в XPath, если на то пошло).

Первый аргумент должен быть строкой. Если вы скармливаете ему список узлов (это делает " li "), должно произойти преобразование в строку. Но это преобразование выполняется только для первого узла в списке.

В вашем случае первый узел в списке - это

  • Тип: Clip Fan
  • (преобразованный в строку: " Тип: Clip Fan "), что означает, что это:

    //ul[@class='featureList' and contains(li, 'Type')]

    действительно выберет узел!

    57
    ответ дан 23 November 2019 в 23:33
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: