python xlxml用于匹配属性中子字符串的xpath表达式

时间:2011-12-21 16:14:05

标签: python xpath lxml

假设我有以下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)匹配 src 属性中 / images 的所有图像元素

任何帮助非常感谢

由于

3 个答案:

答案 0 :(得分:9)

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

(或类似的东西)应该这样做。

答案 1 :(得分:1)

  

我正在寻找一个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属性的值实际 {{1}开头}。如果是这样,则更精确的XPath表达式为:

"/images"

答案 2 :(得分:0)

您需要使用predicates,您的谓词表达式将使用contains函数。 union operator也可能派上用场。