如何从XPath中的标记中选择一个未知数量级别的节点?

时间:2009-11-06 19:17:24

标签: xml xpath lxml

示例,如果我有

<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的查询?

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

2 个答案:

答案 0 :(得分:7)

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

/html/path/to/form//input

是优选的。如果你在形式的背景下,甚至更好。您的XPath查询看起来更像:

form//input

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

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

答案 1 :(得分:2)

使用双正斜杠,所以//input将选择所有输入元素,无论层次结构如何。

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

编辑:是的,谢谢校正克拉根。