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

计算xpath选择器以获取p和li标记中的文本

  •  0
  • LarS  · 技术社区  · 6 年前

    为了根据关键字链接对列表自动将关键字替换为链接,我需要在Drupal的 Alinks 模块。

    我修改了现有的xpath选择器,如下所示,如果它是有效的或可能得到改进的,我希望获得有关它的反馈:

    //*[p or li]//text()[not(ancestor::a) and not(ancestor::script) and not(ancestor::*[@data-alink-ignore])]
    

    xpath可以处理任何html5内容,也可以处理自关闭标记(不是格式良好的xml)——这就是模块的设计方式,而且工作得非常好。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Alejandro    6 年前

    为了选择文本节点的子代 p li 不是 a script 元素,可以使用此xpath 1.0:

    //*[self::p|self::li]
       //text()[
          not(ancestor::a|ancestor::script|ancestor::*[@data-alink-ignore])
       ]
    
        2
  •  0
  •   zx485 potemkin    6 年前

    xpath表达式无效。你错过了一个 / 之前 text() . 所以一个有效的表达式是

    //*[p or li]/text()[not(ancestor::a) and not(ancestor::script) and not(ancestor::*[@data-alink-ignore])]
    

    但是,如果没有XML源文件,则无法判断此表达式是否与所需节点匹配。