Почему этот запрос XPath не работает так, как я предполагал? (поиск элементов с некоторыми @, исключая элементы с другими @)
У меня есть следующий запрос (XPath 2.0):
//xref[contains(@href,'#') and @class='- topic/xref ' and @type!='step' and @type!='fig' and @type!='substep']
Как видите, я хочу найти элементы topic/xref с хешем в их атрибуте href. Я хочу исключить кератиновые типы элементов. Проблема в том, что в приведенном выше запросе не отображаются элементы с @outputclass='expandable'
Я должен был запустить отдельный, чтобы идентифицировать их:
//xref[contains(@href,'#') and @outputclass='expandable']
Почему первый, более длинный запрос не отображает эти элементы? Я также попробовал содержит (@class='- topic/xref) вместо @ class =' - topic/xref ', и это не помогло.
2 ответа
Попробуй ниже XPath
:
//xref[@class="- topic/xref " and contains(@href, "#") and not(@type=("fig", "substep", "table") or @outputclass="expandable")]
что вернется xref
элементы с class="- topic/xref "
а также #
в href
атрибут, но не имеет type
атрибут со значениями "fig", "substep", "table"
или же outputclass
атрибут со значением "expandable"
Вы не показали свой источник XML, но я подозреваю, что вы ожидали получить элементы, не имеющие @type
приписывать. Тем не менее, условие @type!='XYZ'
верно только для элемента, который имеет @type
атрибут, значение которого отличается от 'XYZ'. Если мое предположение верно, вы намеревались not(@type='XYZ')
,