html - XPath 不选择嵌套匹配
问题描述
假设我有这个:
<el class="classname">
...
<el class="classname">
</el>
...
</el>
<el class="classname">
...
<el class="classname">
...
<el class="classname">
</el>
...
</el>
...
</el>
如果这个 XPath 应该是相对的(即如果我事先匹配其中一个,我可以添加相同的 XPath 并且它仍然可以工作,我能否只获得两个顶级(没有嵌套的))
解决方案
Lets say your xml looks like this:
<root>
<div>
<div>
<el class="classname" id="a1">
<div>
<el class="classname" id="a2">
<div>
<el class="classname" id="a3">
<div>
<el class="classname" id="a4"/>
</div>
</el>
</div>
</el>
<el class="classname" id="a5">
<div>
<el class="classname" id="a6">
<div>
<el class="classname" id="a7"/>
</div>
</el>
</div>
</el>
</div>
</el>
</div>
</div>
<el class="classname" id="a8">
<div>
<el class="classname" id="a9">
<div>
<el class="classname" id="a10">
<div>
<el class="classname" id="a11"/>
</div>
</el>
</div>
</el>
</div>
</el>
</root>
you can use the count on ancestor's to get the correct level. For the first level use XPath:
//el[@class='classname'][count(ancestor::el[@class='classname'])=0]
will only select el-elements with @id="a1"
and @id="a8"
For the second level use this XPath:
//el[@class='classname'][count(ancestor::el[@class='classname'])=1]
This will select the @id="a2"
, @id="a5"
and @id="a9"
For the third level use :
//el[@class='classname'][count(ancestor::el[@class='classname'])=2]
This will select the @id="a3"
, @id="a6"
and @id="a10"
推荐阅读
- javascript - 如何使用Javascript有条件地查找顶级父元素
- vba - 使用 VBA 在 power point 幻灯片中的同一对象上单击 2 次之间经过的时间
- c++ - 仅在函数的模板实例化时关联模板成员变量
- javascript - Firefox 问题:在 iframe 加载事件中注入脚本标记时过早触发?
- c# - ASP.NET Core 2.1,Angular 5:Hangfire Auth 仅适用于登录
- python - 如何在 pandas 数据框中选择特定值并将其替换为 NaN。如何从每个级别 1 多索引中删除一列
- .htaccess - htaccess 操作查询字符串
- mesos - 为什么 Marathon 调度程序在重启 marathon 服务时会重启部署?
- neo4j - Neo4j:如何从 mac 中卸载 Neo4j?
- r - dplyr 后的列引用不起作用