XPath:选择节点,其中包含标准化文本,但不包括祖先节点

时间:2019-12-22 20:49:56

标签: javascript html xml xpath

选择第一亲本的最有效,最通用的方法是什么,该方法包含文本序列“快速的棕色狐狸跳过懒狗”。 (此外,无需依赖父母是div的知识)


我正在寻找一个性能较高的通用查询,以选择“快速的棕色狐狸跳过了懒狗。”,但看来我实际上需要使用textContent :(单击DOM中的节点→ $ 0.textContent):`

"

    The
    quick brown fox
    jumped over the


    lazy dog.

"

即使通过了这种荒谬的格式,我的XPath也会选择祖先(不超过身体),而不仅仅是第一个(很少)祖先。如何限制范围?


运行代码段→整页→按照说明进行操作

<div id='dont-select-this' style='text-align:center'>
  <div id='dont-select-this-but-it-would-be-cool-if-you-could' style='background:lightgreen;'>
    <div id='select-this-one'>
      <p>
        <span>The</span>
        <em>quick brown fox</em>
        <span>jumped over the</span>
      </p>
      <p>
        lazy<span> </span><b>dog.</b>
      </p>
    </div>
  </div>
  <hr>
  <div>open chrome devtools → console</div>
  <div>change frame (see below)</div>
  <div>type <code>$x('//*[contains(., "quick brown fox")]')</code></div>
  <hr>
  <img alt='select chrome devtools frame' height=300 src='https://i.imgur.com/L1MhCY8.png'/>
</div>

2 个答案:

答案 0 :(得分:1)

此XPath,

//div[normalize-space() = 'The quick brown fox jumped over the lazy dog.']

仅选择具有以下div值的两个@id元素,

dont-select-this-but-it-would-be-cool-if-you-could
select-this-one

根据要求。


如果您实际上想排除div值为id(尽管名称为dont-select-this-but-it-would-be-cool-if-you-could)的div元素,并且 only 选择带有记录的字符串值,然后:

  1. 向上述XPath添加其他谓词。
  2. *更改为//*[ normalize-space() = 'The quick brown fox jumped over the lazy dog.' ] [not(.//*[normalize-space() = 'The quick brown fox jumped over the lazy dog.' ])]

一起:

div

这仅选择id属性值为select-this-one的{​​{1}}。

答案 1 :(得分:0)

最终与此一起

//*[         contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.') ]
   [not(.//*[contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.') ])]

$x("//*[contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.')][not(.//*[contains(normalize-space(.), 'The quick brown fox jumped over the lazy dog.') ])]")
相关问题