2015-05-24 5 views
1

Я отчаянно пытаюсь объединить несколько фильтров в xpath. Предположим, мои данные выглядит следующим образом:xpath: объединение нескольких фильтров на одном уровне

<Table name="MyTable1"> 
    <Item> 
    <Status date="2015-03-01" category="one/two">DELETE</Status> 
    <Old /> 
    <Current> 
     <Field name="ID">1</Field> 
     <Field name="Title">This is my title</Field> 
     <Field name="Short_title">my short title</Field> 
     <Field name="Order">1</Field> 
    </Current> 
    </Item> 
    <Item> 
    <Status date="2015-03-01" category="one/two">EQUAL</Status> 
    <Old /> 
    <Current> 
     <Field name="ID">2</Field> 
     <Field name="Title">here comes another title</Field> 
     <Field name="Short_title">another short one</Field> 
     <Field name="Order">2</Field> 
    </Current> 
    </Item> 
</Table> 

Мое желание, чтобы получить доступ ко всем «Current» -nodes что

  • содержат категории состояния «два»
  • имеют статус, который не делает содержат "DELETE"

Я попытался объединить несколько вопросы, которые задают StackOverflow:

Например, один из моих запросов был бы:

  • /Table/Item[Status[[contains(@category,'two')] AND [not(contains('DELETE')]]/Current

Любые идеи, что может быть бетт er подход?

ответ

2

Вы можете использовать следующее выражение: XPath

//Status[contains(@category,"two") and not(text()="DELETE")]/following-sibling::Current 
+0

Большое спасибо за быстрый ответ. Ты многое помог! – Tomukas

+0

Я рад видеть, что это помогло – hek2mgl

1

Вы можете просто объединить два логических выражений с and непосредственно, не ставят квадратные скобки вокруг каждого выражения. :

/Table/Item[Status[contains(@category,'two') and not(contains(., 'DELETE'))]]/Current 
+0

Большое спасибо за быстрый ответ. Ты многое помог! – Tomukas

Смежные вопросы