Python xlxml xpath 表达式匹配属性中的子串

5 投票
3 回答
4953 浏览
提问于 2025-04-17 08:47

假设我有下面这个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) 找到所有在style属性中包含/images的元素 并且 2) 找到所有在src属性中包含/images的图片元素

任何帮助都非常感谢

谢谢

3 个回答

0

你需要使用谓词,你的谓词表达式会用到包含这个函数。还有并集运算符也可能会很有用。

1

我在找一个XPath表达式,它可以做到以下两点:1) 匹配所有在style属性中包含/images的元素。

直接翻译成XPath:

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

. . .

...

还有 2) 匹配所有在src属性中包含/imagesImage元素。

在提供的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')
    ]
10
 //element[contains(@style, '/images') or (@class='Image' and contains(@src, '/images'))]

(或者类似的东西)应该可以做到这一点。

撰写回答