Почему этот запрос 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'),

Другие вопросы по тегам