Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 查找以特定模式开头的属性名称_Xpath - Fatal编程技术网

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

Xpath 查找以特定模式开头的属性名称,xpath,Xpath,我希望找到一个元素中与特定模式匹配的所有属性 所以对于一个元素来说 <element s2="1" name="aaaa" id="1" /> <element s3="1" name="aaaa" id="2" /> 我希望能够找到以“s”开头的所有属性(对于第一个元素返回值s1,对于第二个元素返回值s3) 如果这超出了xpath的能力,请告诉我 element/@*[substring(name(), 1,1) = "s"] 将匹配以“s”开头的任何属性 函数

我希望找到一个元素中与特定模式匹配的所有属性

所以对于一个元素来说

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

我希望能够找到以“s”开头的所有属性(对于第一个元素返回值s1,对于第二个元素返回值s3

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

element/@*[substring(name(), 1,1) = "s"]
将匹配以“s”开头的任何属性

函数
以()开头
可能比使用
子字符串()看起来更好

element/@*[starts-with(name(), 's')]
此XPath表达式选择名称以字符串
's'
开头的所有atribute节点,这些节点是名为
element
的元素的属性,这些元素是当前节点的子节点


starts-with()
是XPath 1.0中的一个标准函数我使用Python中的lxml.html模块测试了@Dimitre Novatchev@Ledhund给出的答案

element/@*[以(name(),'s')开头]
element/*[子字符串(name(),1,1)=“s”]
仅返回s2和s3的值。您将无法知道哪个值属于哪个属性

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

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

element/@*[以(name(),“s”)开头]/。。

element/@*[以(name(),“s”)开头]/parent::*

element/@*[以(name(),“s”)开头]/parent::node()

上面没有一个适合我的。 因此,我没有做一些改变,这对我来说很有效。:)


Hmmm在XMLSpy中使用这个,这是我的Xpath应用程序,我得到了一个错误“意外标记-”[substring(name(),1,1)=“。这看起来确实像是我需要的方法,非常感谢你的回答。感谢Dimitrie,下面的子字符串模式也可以使用元素/@*[substring(name(),1,1)='s']@Dunderklumpen:事实上,我提出的XPath表达式是:
element/@*[以(name(),'s')]开头]
您需要更正您的表达式--现在它在语法上无效。正如广告中所宣传的那样有效,并帮助我获得了原始答案。这正是我想要的!感谢您的提问和回答。:)
/*:UserCustomField[starts-with(@name, 'purchaseDate')]