Dom 选择子节点

Dom 选择子节点,dom,css-selectors,jsoup,Dom,Css Selectors,Jsoup,如何选择以下元素以插入新元素 注意:对于嵌套表,假设有效和,并插入无效标记的。表格不能直接存在于t正文中 <html> <body> <table> <tbody> ....more elements here... <table> <tbody> <----- how do I select this? </tbo

如何选择以下元素以插入新元素


注意:对于嵌套表,假设有效和,并插入无效标记的。
表格
不能直接存在于
t正文

<html>
  <body>
    <table>
      <tbody>
        ....more elements here...
        <table>
          <tbody> <----- how do I select this?

          </tbody>
        </table>
      </tbody>
    </table>
  <body>
</html>
如果内部表不在
tr>td
中,则该内部表实际上是作为外部表的下一个同级表构造的。换句话说,您实际上根本没有内部表

除非可以更正标记,否则必须将该“内部表”视为以下同级:

Element tablebody = doc.body().select("table > tbody > tr > td > table > tbody").first();
如果可以更正标记,则可以使用缺少的
tr
td
位完成选择器:

Element tablebody = doc.body().select("table > tbody table > tbody").first();
或者简单地用后代选择器替换其中一个子选择器:


此外,
tbody
只能将
tr
元素作为子元素。不能按照您尝试的方式将
pre
元素附加到
tbody
中。您可能希望在
tbody
中选择第一个
tr>td
,并将其附加到那里。

“假设有效并用于[…]插入标记。”考虑到您的代码,这显然是不可能的。您的代码清楚地显示了在
tbody
元素中插入
pre
。你不能只是在纸上做假设,然后假装你的代码将基于这些假设工作(除非jsoup知道如何自己解决这个问题)。选择(“表格>车身表格>车身”).first();工作得很好!
<html>
  <body>
    <table>
      <tbody>
        ....more elements here...
        <table>
          <tbody> <----- how do I select this?

          </tbody>
        </table>
      </tbody>
    </table>
  <body>
</html>
Element tablebody = doc.body().select("table > tbody table > tbody").first();