程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了XPath 不选择嵌套匹配大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决XPath 不选择嵌套匹配?

开发过程中遇到XPath 不选择嵌套匹配的问题如何解决?下面主要结合日常开发的经验,给出你关于XPath 不选择嵌套匹配的解决方法建议,希望对你解决XPath 不选择嵌套匹配有所启发或帮助;

假设我有这个:

<el class="classname">
  ...
  <el class="classname">
  </el>
  ...
</el>
<el class="classname">
 ...
  <el class="classname">
    ...
    <el class="classname">
    </el>
    ...
  </el>
 ...
</el>

如果这个 XPath 应该是相对的(即如果我事先匹配了其中一个,我可以添加相同的 XPath,它仍然可以工作

解决方法

假设您的 xml 如下所示:

<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>

您可以使用祖先的计数来获得正确的级别。对于第一级使用 XPath:

//el[@class='classname'][count(ancestor::el[@class='classname'])=0]

只会选择带有 @id="a1"@id="a8" 的 el 元素

对于第二级使用此 XPath:

//el[@class='classname'][count(ancestor::el[@class='classname'])=1]

这将选择 @id="a2"@id="a5"@id="a9"

对于第三级使用:

//el[@class='classname'][count(ancestor::el[@class='classname'])=2]

这将选择 @id="a3"@id="a6"@id="a10"

大佬总结

以上是大佬教程为你收集整理的XPath 不选择嵌套匹配全部内容,希望文章能够帮你解决XPath 不选择嵌套匹配所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。