Python xlxml xpath выражение для соответствия подстроки в атрибуте - PullRequest
5 голосов
/ 21 декабря 2011

Допустим, у меня есть следующий XML

<root>
   <element class="Page" style="background: url(/images/RlEguQY3_ghsdr.png?1324483033) repeat left top;" />
   <element class="User" />
   <element class="Image" src="/images/bg.png" />
</root>

Я ищу выражение xpath, которое 1) соответствует всем элементам, которые имеют / images в стиле атрибут и 2) соответствует всем элементам изображения, которые имеют / images в атрибуте src

Любая помощь с благодарностью

Спасибо

Ответы [ 3 ]

9 голосов
/ 21 декабря 2011
 //element[contains(@style, '/images') or (@class='Image' and contains(@src, '/images'))]

(или что-то подобное) должно это сделать.

1 голос
/ 21 декабря 2011

Я ищу выражение xpath, которое 1) соответствует всем элементам, которые иметь /images в атрибуте style

Непосредственно переведено на XPath :

/*/element[contains(@style, '/images')]

. , .

...

и 2) соответствует всем Image элементам, которые имеют /images в src атрибут

В предоставленном документе XML нет Image элементов . Возможно, вы имели в виду: element элементы с атрибутом class со значением "Image":

/*/element[@class='Image'][contains(@src, '/images')]

В сочетании два приведенных выше выражения XPath дают это :

/*/element
    [contains(@style, '/images')
   or
    @class='Image' and contains(@src, '/images')
    ]

Мне кажется, что наиболее вероятно, что для второго приведенного выше требования вы действительно хотите, чтобы значение атрибута src действительно начиналось с "/images". Если это так, то более точное выражение XPath:

/*/element
    [contains(@style, '/images')
   or
    @class='Image' and starts-with(@src, '/images')
    ]
0 голосов
/ 21 декабря 2011

Вам нужно использовать предикаты , ваши выражения предикатов будут использовать функцию содержит . оператор объединения также может пригодиться.

...