Вот ваш XPath-запрос с пространством имен с обходом, как указано в комментариях:
//*:SqlTaskData[contains(translate(@*:SqlStatementSource,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') ,"select *")]/../../@*:refId
Для объяснения прочитайте kjhughes отличный ответ здесь .
Теперь получение всех SqlStatementSource, которые содержат «select *», работает одинаково:
//*:SqlTaskData[contains(translate(@*:SqlStatementSource,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') ,"select *")]/@*:SqlStatementSource
Онлайн-демонстрация
илииспользуйте функцию local-name()
, как вы уже узнали:
//*[local-name()='SqlTaskData'][contains(translate(@*[local-name()='SqlStatementSource'],'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') ,"select count(*)")]/@*[local-name()='SqlStatementSource']