Принимая это XML-фрагмент в качестве примера:содержит в XPath проверяет только первый матч
<list>
<element>
<title>Element 1</title>
<group>Group 1</group>
</element>
<element>
<title>Element 2</title>
<group>Group 1</group>
</element>
<element>
<title>Element 3</title>
<group>Group 1</group>
<group>Group 2</group>
</element>
<element>
<title>Element 4</title>
<group>Group 2</group>
<group>Group 3</group>
</element>
</list>
Чтобы получить все группы, которые я использую следующее: XPath
//group/text()
и работает отлично -I удалить дубликаты позже в python, используя набор, поскольку я не знаю, могу ли я сделать это с помощью xpath. Но когда я хочу, чтобы получить элементы, которые содержат «Группа 3» Я стараюсь следующий XPath:
//element[contains(group/text(), "Group 3")]
и я получаю пустой результат. Хотя при поиске элементов, которые содержат «Группу 1», с:
//element[contains(group/text(), "Group 1")]
Я получаю правильный результат с 3 элементами. И если я ищу «группу 2», я получаю неправильный результат только с одним элементом.
Что я не принимаю во внимание? Как я могу выполнить поиск по группе?
Лучше все еще '// элемент [группа = "Группа 1"]'. Лучше избегать использования 'text()' не только потому, что это обычно не нужно, но также и потому, что это иногда неправильно - например, оно не будет работать, если XML-документ содержит комментарии, смешанные с текстом. –