代码之家  ›  专栏  ›  技术社区  ›  Dunderklumpen

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

  •  23
  • Dunderklumpen  · 技术社区  · 14 年前

    我正在寻找与某个特定模式匹配的元素的所有属性。

    所以对于一个元素来说

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

    我希望能够找到以“s”开头的所有属性(返回 S1 对于第一个元素和 S3 对于第二个元素的值)。

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

    3 回复  |  直到 7 年前
        1
  •  37
  •   Dimitre Novatchev    14 年前

    使用 :

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

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

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

        2
  •  3
  •   Ledhund    12 年前
    element/@*[substring(name(), 1,1) = "s"]
    

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

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

        3
  •  2
  •   Meow    7 年前

    我已经测试了两者给出的答案 @迪米特·诺瓦切夫 @莱顿 ,使用 lxml.html文件 模块输入 蟒蛇 .

    两个 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()