(отвечая на оригинальный вопрос): попробуйте следующее выражение XPath-1.0:
//text()[starts-with(normalize-space(.),'#{') and substring(normalize-space(.),string-length(normalize-space(.)),1)='}' and ancestor::foo[@attr1]]
Возвращает нужные text()
узлы, но с начальными и конечными пробелами. Этого нельзя избежать в XPath-1.0, потому что функция normalize-space()
принимает только один аргумент. В XPath-2.0 вы можете просто добавить /normalize-space()
в конец выражения, чтобы обработать это.