如何使用selector-syntax搜索此html中的第二个表单

时间:2014-08-16 13:31:08

标签: jsoup

使用给定的HTML代码

<code>&lt;html&gt;
&lt;body&gt;
   &lt;form&gt; 
      &lt;p&gt;test&lt;/p&gt;
   &lt;/form&gt;
   &lt;script&gt;&lt;/script&gt; 
   &lt;form&gt; 
      &lt;p&gt;test2&lt;/p&gt; 
   &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</code>

我无法使用此选择器语法搜索第二个表单标记:

Elements result = doc.select("form:eq(1)");

我什么也得不回来。如果我从源中删除脚本标记,则select按预期工作,然后我返回test2-paragraph。 为什么eq(1)在这里没有按预期工作?

此致

1 个答案:

答案 0 :(得分:0)

关于jsoup选择器的文档将:eq(n)伪选择器定义为匹配&#34;其兄弟索引等于n&#34;的元素。兄弟姐妹指数是父母子女中元素的指数。

在你的例子中:

<html>
    <body>
     <form></form>      <!-- Sibling Index: 0 -->
     <script></script>  <!-- Sibling Index: 1 -->
     <form></form>      <!-- Sibling Index: 2 -->
    </body>
</html>

因此,要使用选择器获取第二个表单:

doc.select("form:eq(2)");

否则eq(int)方法会按预期执行:

doc.select("form").eq(1);

选择器的行为与jQuery不同,其中eq(n)伪选择器匹配先前匹配元素集合中的第n个元素。

参考文献: