XPATH-запрос для фильтрации значений только по определенным атрибутам - PullRequest
20 голосов
/ 08 июня 2011

У меня есть следующий 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, который работает как положено?

1 Ответ

25 голосов
/ 08 июня 2011

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

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

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

/Library/Item/Field[
  @Name="Name" 
  and ../Field[@Name="File Type"] = "mid"
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...