查找以特定模式开头的属性名称

时间:2010-11-11 00:44:31

标签: xpath

我希望找到与某种模式匹配的元素的所有属性。

所以对于一个元素

<element s2="1" name="aaaa" id="1" />
<element s3="1" name="aaaa" id="2" />

我希望能够找到所有以's'开头的属性(为第一个元素返回 s1 的值,为 s3 返回值第二个要素)。

如果这超出了xpath的能力,请告诉我。

4 个答案:

答案 0 :(得分:37)

使用

element/@*[starts-with(name(), 's')]

此XPath表达式选择名称以字符串's'开头的所有属性节点,它们是名为element的元素的属性,它们是当前节点的子节点。

starts-with()是XPath 1.0中的标准函数

答案 1 :(得分:3)

element/@*[substring(name(), 1,1) = "s"]

将匹配以's'开头的任何属性。

功能starts-with()可能看起来比使用substring()

更好

答案 2 :(得分:2)

我使用中的 lxml.html 模块测试了来自 @ Dimitre-Novatchev @Ledhund 的给定答案蟒

element/@*[starts-with(name(), 's')]element/@*[substring(name(), 1,1) = "s"]都只返回 s2 s3 。您将无法知道哪个值属于哪个属性。

我认为在实践中,我更感兴趣的是找到包含以特定字符开头的名称属性的元素本身,而不仅仅是它们的值。

要实现这一点非常简单,只需在最后添加/..

element/@*[starts-with(name(), "s")]/..

element/@*[starts-with(name(), "s")]/parent::*

element/@*[starts-with(name(), "s")]/parent::node()

答案 3 :(得分:0)

没有人为我工作。 因此,我没有进行任何更改,但对我有用。 :)

/*:UserCustomField[starts-with(@name, 'purchaseDate')]