Запрос 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="File Type"?

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

1 ответ

Решение

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

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

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

/Library/Item/Field[
  @Name="Name" 
  and ../Field[@Name="File Type"] = "mid"
]
Другие вопросы по тегам