Подтвердить что ты не робот

Запрос XPATH для фильтрации значений только для определенных атрибутов

У меня есть следующий XML:

<Library>
 <Item>
  <Field Name="Name">smooth</Field>
  <Field Name="File Type">mid</Field>
  <Field Name="File Size">60026</Field>
 </Item>
 <Item>
  <Field Name="Name">mid</Field>
  <Field Name="File Type">mp3</Field>
  <Field Name="File Size">4584972</Field>
 </Item>
</Library>

Я бы хотел получить все имена элементов элементов типа "mid" . Мой запрос XPATH выглядит как

/Library/Item/Field
    [
    @Name="Name" and 
    (../Field[@Name="File Type" and ../Field[.="mid"]])
    ]

Но, к сожалению, оба элемента возвращаются из этого запроса.

smooth
mid

Похоже, последнее условие не проверяется только полями с атрибутом "Тип файла", но все поля. Это приводит к возврату имени "mid" , даже если этот элемент имеет тип файла "mp3".

Как я могу ограничить сравнение со значением "mid" значением поля с атрибутом Name= "Тип файла"?

Может ли кто-нибудь предложить мне синтаксис XPATH, который работает как ожидалось?

4b9b3361

Ответ 1

Предикаты XPath могут применяться везде, это было бы более прямолинейно:

/Library/Item[Field[@Name="File Type"] = "mid"]/Field[@Name="Name"]

Ваше собственное выражение будет правильным, так как

/Library/Item/Field[
  @Name="Name" 
  and ../Field[@Name="File Type"] = "mid"
]