XPath:如何从包含未知标记名称的路径中提取节点?

时间:2016-11-14 10:55:32

标签: javascript html css xpath

<html><body>
<div id="start">
   <div>
      <div>NOT A TARGET</div>
   </div>
   <aBcDeFG>
      <div>target</div>
   </aBcDeFG>
</div>
</body></html>

有一个与此类似的文件。 <aBcDeFG>标记是在每次页面刷新时生成的随机标记。我用通配符编写了一个XPath表达式来找到target div

$x('/html/body/div/*/div')

该表达式会返回两个div,因为NOT A TARGET匹配:[div, div]

$x('/html/body/div/*[2]/div')不起作用,返回值为空。

$x('/html/body/div/node()[2]/div')也不起作用,返回值为空。

如何仅通过索引找到未知标签?

3 个答案:

答案 0 :(得分:0)

'(/html/body/div/*[2])/div'

答案 1 :(得分:0)

您的/html/body/div/*[2]/div选择器is correct。我猜你在开发人员工具控制台中获取节点时遇到了困难。试试这个:

$x('/html/body/div/*[2]/div')[0].innerHTML

使用document.evaluate

的示例

var r = document.evaluate('/html/body/div/*[2]/div', document, null, XPathResult.ANY_TYPE, null);
var n = r.iterateNext();
console.log(n.innerHTML);
<html><body>
<div id="start">
   <div>
      <div>NOT A TARGET</div>
   </div>
   <aBcDeFG>
      <div>target</div>
   </aBcDeFG>
</div>
</body></html>

答案 2 :(得分:0)

如果当syou说“未知”标签时,你的意思是“不同于DIV的标签”,你可以使用这个xpath:

/html/body/div/*[not(name(.)='div')]/div