2015-02-13 3 views
0

Наличие такого файла xml. Как я могу выбрать только те теги, которые атрибут href заканчивается parent, как и третий элемент ниже.Выбрать по xpath, зная только атрибут элемента

Определить его положение как elem = tree.findall('{*}CustomProperty')[2] не подходит, потому что некоторые документы могут иметь только один parent HREF, другие 5-10 и третий, возможно, не такие hrefs вообще.

Я обычно использую xpath, но не могу понять, как я могу указать xpath для поиска конца атрибута.

Также XPath не должен, я буду рад использовать любой способ, который подходит для моей цели

Так как я могу получить CustomProperty элемент, который имеет атрибут href, который заканчивается словом parent?

<CustomProperty href="urn:1653267:643562dafewq:cs:46wey5ge:234566">urn:1653267:643562dafewq:cs:46wey5ge:234566:ss</CustomProperty> 
<CustomProperty href="urn:1653267:643562dafewq:cs:46wey5ge:234566">urn:1653267:643562dafewq:cs:46wey5ge:234566:ss</CustomProperty> 
<CustomProperty href="urn:1653267:643562dafewq:cs:46wey5ge:234566:parent">urn:1653267:643562dafewq:cs:46wey5ge:234566:ss</CustomProperty> 

Заранее спасибо за помощь

ответ

2

Попробуйте использовать содержит селектор, чтобы найти элемент с атрибутом HREF, который содержит слово родителю

//*[contains(@href, 'parent')] 

или, если вы уверены, что о позиции текста «родитель» вы можете использовать концы - с

//*[ends-with(@href, 'parent')] 
+2

'end-with' требует поддержки xpath 2.0 – collapsar

+1

@collapsar спасибо за указание – aberna

+0

@collapsar, как я могу определить, поддерживается ли поддержка xpath 2.0? Я использую последнюю библиотеку lxml – micgeronimo

2

//CustomProperty[contains(@href, 'parent') and substring-after(@href, 'parent') = ''] 

отвечает вашим требованиям? Одна из проблем с предложением состоит в том, что он не отвечает за атрибуты href, где parent встречается более одного раза.

Если ваш процессор xpath поддерживает xpath 2.0, используйте предложение aberna.

Не забывайте заменять ось «//» конкретными путями по возможности по соображениям безопасности.

Смежные вопросы