XPath匹配含有指定文本的标签

对于一般的情况, 就是标签中只包含文字, 这种的比较规范, 如:

<div>
  <ul id="side-menu">
    <li class="active">
      <a href="#">
      电子账户
      </a>
      <ul class="nav">
        <li>子菜单1</li>
        <li>子菜单2</li>
      </ul>
    </li>
  </ul>
</div>
  • 1现在想取a节点, 可以这样写: //ul[@id='side-menu']/li/a[contains(text(),"电子账户")]

但是如果a节点是这样呢? 电子账户这几个字没有被一个明确的标签包裹:

<div>
  <ul id="side-menu">
    <li class="active">
      <a href="#">
        <i>图标</i>
        &nbsp;电子账户
        <span>箭头</span>
      </a>
      <ul class="nav">
        <li>子菜单1</li>
        <li>子菜单2</li>
      </ul>
    </li>
  </ul>
</div>

此时再用上边的xpath表达式就到不到了.

不过可以借助string(), 将a标签里边的东西全部转换成字符串, 再用contains()判断:
//ul[@id='side-menu']/li/a[contains(string(), '电子账户')]

这样就可以了, 非常实用.

欢迎补充指正!