在一个xpath中选择深度不同的不同节点

时间:2018-09-06 23:57:38

标签: html xpath

<div>
  <p>a</p>
  <ul>
    <li></li>
  </ul>
  <other-tags></other-tags>
<div>

在上面的示例中,我想选择pli标签。

我可以使用//div/p|//div/ul/li来做到这一点,但是不用|也可以实现同样的目的,换句话说,不用重复//div。我尝试了//div/*[self::p or self::ul/li],但是它选择了pul标签。

2 个答案:

答案 0 :(得分:1)

此XPath,

//*[self::p or self::li]

将选择文档中的所有pli元素。

此XPath,

//div[@id="i1"]//*[self::p or self::li]

将选择目标p元素下的所有lidiv元素。

答案 1 :(得分:0)

您所要做的就是使用/** * From: https://gist.github.com/kethinov/6658166 */ exports.default = function walkSync(dir, filelist) { var fs = fs || require('fs'), files = fs.readdirSync(dir); filelist = filelist || []; files.forEach(function (file) { var path = dir + file; if (fs.statSync(dir + file).isDirectory()) { filelist = walkSync(dir + file + '/', filelist); } else { filelist.push(path); } }); return filelist; }; 。另外,它有助于研究 //p|//li 的内容,因为我发现此信息here。为什么要避免在XPath中使用before