2010-11-11 57 views
22

我正在查找匹配特定模式的元素的所有属性。查找以特定模式开头的属性名称

因此,对于一个元素

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

我希望能够找到这样开始的所有属性的“(返回的S1的第一个元素和值值S3的第二个元素)。

如果这不在xpath的能力范围内,请让我知道。

回答

35

使用更好:

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

此XPath表达式选择其名称以字符串's'启动所有属性附加伤害节点被命名element元素的属性这是当前节点的子节点。

starts-with()是XPath 1.0中

+0

非常感谢回复,这也是一个很好的答案。 – Dunderklumpen 2010-11-11 05:17:43

+0

像广告一样工作,并帮助我得到原始答案的工作。 – Dunderklumpen 2010-11-11 05:28:19

+0

这正是我一直在寻找的!感谢您的问题和答案。 :) – ParagJ 2013-05-28 11:34:43

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

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

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

+0

Hmmm在XMLSpy中使用它,这是我的Xpath应用程序我收到一个错误“Unexpected token - ”[substring(name(),1,1)=“。 – Dunderklumpen 2010-11-11 01:38:03

+0

这绝对看起来像我需要这么多谢谢答案的方法。 – Dunderklumpen 2010-11-11 02:58:45

+0

感谢Dimitrie下面的子字符串模式也起作用元素/ @ * [substring(name(),1,1)='s'] – Dunderklumpen 2010-11-11 05:25:38

0

的标准功能我已经从两个@ Dimitre-Novatchev@Ledhund测试给定的答案,在使用lxml.html模块的Python

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

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

为了实现这一目标很简单,只是在末尾添加/..

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

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

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

相关问题