Используйте :
/*[subfield[@code=4 and normalize-space()='xyz']]
/subfield[@code='a']/text()
Или используйте :
string(/*[subfield[@code=4 and normalize-space()='xyz']]
/subfield[@code='a'])
Первое приведенное выше выражение XPath выбирает все текстовые узлы, дочерние для всехsubfield
дочерние элементы верхнего элемента, для которых значение их атрибута code
равно "a"
, но только если у верхнего элемента есть дочерний элемент subfield
, у которого атрибут code
имеет значение 4
и строковое значение которого послеудаление начальных и конечных пробельных символов равно "xyz"
Второе выражение очень похоже, но оно непосредственно оценивается как строковое значение первого из текстовых узлов, выбранных первым выражением.
Эти выражения проще, чем в других ответах, потому что обратная ось вообще не используется и все предикаты указаны в их наиболее подходящем месте.