2011-04-12 2 views
1

Imagine этот XML-файл (извините за больным, например !!)XPATH: Проверьте, если узел XML содержит специальные символы или строки

<DOC> 
<Test> 
    <Name>1 vs 100 Pre pre History</Name> 
    <Type>Dinasors</Type> 
</Test> 

<Test> 
    <Name> 1 vs 100 Post moderns</Name> 
    <Type>Aliens</Type> 
</Test> 
</Doc> 

Идея возвращает значение типа, Проверяя, если имя узла содержит конкретный символа или строки. Например, я хочу XPath запросов, как:

/Doc//Test[contains "Pre" and "History" and 1]/Type 

То есть проверка, если тест содержит «Pre» и «История» и номер 1, Что будет запрос XPATH? Alo Мне нравится этот запрос, чтобы он не был CASE SENSITIVE.

Спасибо.

+0

мы говорим Xpath 1.0 или 2.0? –

ответ

2

Я думаю, что это должно работать (не проверял):

/Doc//Test[contains(Name,'Pre') and contains(Name,'History') and contains(Name,1)]/Type 

Однако это чувствительно к регистру. Если вы хотите, чтобы он не учитывал регистр, то вы можете взглянуть на this question или this question: вы должны использовать translate, чтобы конвертировать Name в нижний регистр (или в верхний регистр), а затем совпадать.

+2

+1 Правильно, но заметьте, что оператор '//' не нужен. Также он может быть уменьшен до '/ Doc/Test [Name [содержит (., 'Pre')] [содержит (., 'History'] [содержит (., '1')]]/Type' –

+1

@Alejandro: как обычно, спасибо за ваши предложения! :) – MarcoS

0

это работает, когда:

/Doc//Test[contains(Name,'Pre')][contains(Name,'History')][contains(Name,1)]/Type; 
Смежные вопросы