Xpath возвратный узел относительно другого узла - PullRequest
1 голос
/ 13 сентября 2011

Я выполнил поиск всех узлов, у которых есть атрибут, содержащий (подстроку) строку.Эти узлы могут быть найдены на разных уровнях дерева, иногда на 5 или 6 уровнях.Я хотел бы знать, какому родительскому / родительскому узлу они соответствуют на указанном уровне, глубиной 2 уровня.Результат только для поиска должен быть намного больше, чем результаты для соответствующих родителей.

РЕДАКТИРОВАТЬ, чтобы включить код: /xs:schema/xs:element/descendant::node()/@*[starts-with(., 'my-search-string-here')]

РЕДАКТИРОВАТЬ, чтобы уточнить мои намерения:

Когда я выполняю приведенный выше Xpath, иногда получаются

/xs:schema/xs:element/xs:complexType/xs:attribute или /xs:schema/xs:element/xs:complexType/xs:sequence/xs:element или /xs:schema/xs:element/xs:complexType/xs:complexContent/xs:extension/xs:sequence/xs:element

Эти результаты указывают место в схеме, где я добавил код, специфичный для приложения.Однако мне нужно удалить этот код сейчас.Я создаю схему «адаптера», которая будет redefine исходная схема (нетронутой) и import моя схема.Строка, которую я ищу, - мой префикс.Что мне нужно, так это @name схемы / xs: schema / node (), в которой находится префикс, чтобы я мог создать новую схему, определяющую эти элементы.Они будут импортированы в адаптер и переопределят другую схему (которую я не должен изменять).

Чтобы повторить, мне нужно найти все атрибуты (потомки / xs: schema / xs: element)для префикса, а затем получите соответствующее / xs: schema / xs: element / @ name для каждого совпадения с поиском.

Ответы [ 3 ]

1 голос
/ 14 сентября 2011

Это должно сделать это:

/xs:schema/xs:element[starts-with(descendant::node()/@*, 'my-search-string-here')]

Вы хотите думать об этом как

выбрать xs:element s, которые содержат узел с соответствующим атрибутом

вместо

выберите соответствующие атрибуты нисходящих узлов xs:element с, затем вернитесь на

1 голос
/ 13 сентября 2011

Чтобы повторить, мне нужно найти все атрибуты (потомки / xs: schema / xs: element) для префикса, а затем получить соответствующий / xs: schema / xs: element / @ имя для каждого из совпадений для поиска.

 /
 xs:schema/
  xs:element
  [descendant::*/@*[starts-with(., 'my-search-string-here')]]/
   @name
0 голосов
/ 14 сентября 2011

Как упоминал Эрик, мне нужно изменить свой мыслительный процесс на select the xs:elements which contain a node with a matching attribute, а не select the matching attributes of descendant nodes of xs:elements, then work back up.Это очень важно.Однако пример кода, который он опубликовал для выбора атрибутов, не работает, нам нужно использовать другое решение.

Вот код, который работает для выбора элемента, который содержит и атрибут, содержащий * (подстроку) строку.

/xs:schema/child::node()[descendant::node()/@*[starts-with(., 'my-prefix-here')]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...