Chrome中的XPath属性选择错误?

时间:2017-10-19 02:04:33

标签: html xml google-chrome xpath google-chrome-devtools

所以我有以下HTML:

<div myID='carousel'>
   <div>
    <div>
     <h3>First Text</h3>
    </div>
   </div>
</div>

<div myID='carousel'>
   <div>
    <div>
     <h3>Second Text</h3>
    </div>
   </div>
</div>

我试图获得第二个轮播 - 即Second Text

我可以使用h3

获取$x('//div[./h3[contains(text(),"Second Text")]]')

但是,我希望父级div与myID - 任何想法?

1 个答案:

答案 0 :(得分:1)

纯XML / XPath答案

鉴于此XML,

<html>
  <div myID='carousel'>
     <div>
       <div>
         <h3>First Text</h3>
       </div>
     </div>
  </div>

  <div myID='carousel'>
     <div>
       <div>
         <h3>Second Text</h3>
       </div>
     </div>
  </div>
</html>

然后:

  1. 这个XPath,

    //div[.//h3 = "Second Text"]
    

    选择包含字符串值为div的后代h3元素的所有"Second Text"元素。

  2. 这个XPath,

    //div[div/div/h3 = "Second Text" and @myID="carousel"]
    

    选择包含字符串值为div的后代h3元素的所有"Second Text"元素,前提是div元素的myID属性值等于"carousel"

  3. 这个XPath,

    //div[div/div/h3 = "Second Text" and @myID]
    

    选择包含字符串值为div的后代h3元素的所有"Second Text"元素,前提是div元素也具有myID属性,无论它的价值。

  4. Google Chrome XPath答案

    以下是令人困惑的部分:XPath #2 #3 在Chrome中选择 通过$x()。 (WTH?)

    原因是in Chrome, XPath requires lowercasing to query attributes,可能是由XHTML's requirement that element and attribute names must be in lower case推动的。

    Chrome解决方法:测试@myid而不是@myID