Xpath для поиска узла, который имеет ЛЮБОЙ атрибут, содержащий определенную строку? - PullRequest
12 голосов
/ 13 сентября 2011

Я могу искать строку, содержащуюся в определенном атрибуте , если я использую следующий XPath /xs:schema/node()/descendant::node()[starts-with(@my-specific-attribute-name-here, 'my-search-string')]

Однако я хотел бы найти ЛЮБОЙ атрибут, содержащий * строку

Ответы [ 2 ]

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

Пример XML:

<root>
  <element1 a="hello" b="world"/>
  <element2 c="world" d="hello"/>
  <element3 e="world" f="world"/>
</root>

Предположим, нам нужно выбрать элементы с любым атрибутом, содержащим h.В этом примере: element1, element2.Мы можем использовать этот XPath:

//*[@*[starts-with(., 'h')]]

В вашем примере:

/xs:schema/node()/descendant::node()
    [@*[starts-with(@my-specific-attribute-name-here, 'my-search-string')]]
10 голосов
/ 13 сентября 2011

Общий шаблон, который вы ищете:

@*[contains(., 'string')]

, который будет соответствовать любому атрибуту элемента контекста, который содержит string. Поэтому, если вы просто хотите найти атрибуты, содержащие string, во всем документе, вы должны использовать:

//@*[contains(., 'string')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...