Требуемое выражение: :
/root/*/figtitle/autonum/@ID
это означает :
Выбрать все ID
атрибуты любого autonum
элемент, который является дочерним элементом элемента figtitle
, который является внуком верхнего элемента root
.
Если элемент root
не является верхним элементом документа, то если выражение будетвычисляется с родительским элементом root
в качестве узла контекста, выражение должно быть:
root/*/figtitle/autonum/@ID
Объяснение :
Выражение:
someElement/*
выбирает все элементы, которые являются дочерними элементами для элемента с именем someElement
, который является дочерним элементом узла контекста (текущего узла), для которого вычисляется выражение.
Таким образом, это вовсе не обязательноявно перечислить имена потомков someElement
.
Обновление : ОП пояснила в комментарии, что ей нужно выбрать только тех потомков root
, чьи имена содержаттире, цифры и буквы.
Это выражение XPath :
root / * [содержит (name (), '-') и translate (name (), $ vAlphaNum, '') = ''] / figtitle / autonum / @ ID
выбираетточно все такие элементы.
Здесь переменная $vAlphaNum
должна быть определена, чтобы содержать все строчные и прописные буквы и цифры 0-9.
В XSLT 2.0 можно использовать matches()
функция с подходящим регулярным выражением.