Запрос 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"
]