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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找以特定模式开头的属性名称相关的知识,希望对你有一定的参考价值。

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

所以对于一个元素

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

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

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

答案

使用:

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

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

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

另一答案
element/@*[substring(name(), 1,1) = "s"]

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

函数starts-with()可能看起来比使用substring()更好

另一答案

我已经使用Python中的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()

以上是关于查找以特定模式开头的属性名称的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止创建名称与特定模式匹配的 MySQL 数据库

linux如何查找以某个字母打头的文件或文件夹 比如,/etc目录下很多文件,我想列出所有以c开头的文件或文件

名称以两个下划线开头的实例属性被奇怪地重命名了

这种带闭包的模式有名称吗?

sed:查找并替换以特定字符串开头的行中的第 n 个字符

使用 JSoup 选择以特定模式开头的标签