【问题标题】:How can you select a node that's an unknown number of levels deep from a tag in XPath?如何从 XPath 中的标记中选择一个未知层数的节点?
【发布时间】:2009-11-06 19:17:23
【问题描述】:

例如,如果我有

<form name="blah">
   <input name="1"/>
   <input name="2"/>
   <table>
      <tr>
        <td>
          <unkown number of levels more>
           <input name="3"/>
        </td>
      </tr>
   <table>
</form>

如何组合一个返回输入 1,2 和 3 的查询?

编辑:我应该注意我对抓取页面上的所有输入元素不感兴趣,我只想要特定表单的所有输入元素,所以“//”马上就出来了。

【问题讨论】:

    标签: xml xpath lxml


    【解决方案1】:

    无论级别如何,使用// 进行搜索。请记住,这是一个“昂贵的”搜索。因此,您可以指定的上下文越多,XPath 调用它的速度就越快。

    /html/path/to/form//input
    

    更可取。如果您在表单的上下文中,那就更好了。您的 XPath 查询看起来更像:

    form//input
    

    或者如果你只是想要“blah”形式的孩子:

    form[@name='blah']//input
    

    【讨论】:

      【解决方案2】:

      使用双正斜杠,因此//input 将选择所有输入元素,而不考虑层次结构。

      如果您只想要表单元素中的所有输入标签,请使用 //form/input /form//input

      编辑:是的,感谢 Kragen 的更正。

      【讨论】:

      • 这只会返回表单元素的直接后代元素,因此在上面的示例 1 和 2 中,而不是 3。
      猜你喜欢
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 2020-01-20
      • 2021-11-15
      • 2022-08-16
      • 1970-01-01
      相关资源
      最近更新 更多