通过xpath选择只知道元素属性的结尾

时间:2015-02-13 08:17:03

标签: python xml xpath web-scraping lxml

拥有这样的xml文件。如何仅选择href属性以parent结尾的标记,如下面的第三个元素。

按位置确定它  elem = tree.findall('{*}CustomProperty')[2] 不适合,因为某些文档可能只有一个parent href,其他5-10和第三个可能根本没有这样的href。

我倾向于使用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 个答案:

答案 0 :(得分:3)

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

满足您的要求?该建议的一个问题是,parent多次出现的href属性失败。

如果您的xpath处理器支持xpath 2.0,请使用aberna的建议。

出于性能原因,请务必尽可能用特定路径替换“//”轴。

答案 1 :(得分:2)

尝试使用contains选择器查​​找具有属性href的元素,该属性包含单词parent

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

或者如果你确定文字的位置&#34;父母&#34;你可以使用结尾 -

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