选择子节点

时间:2014-03-16 05:58:36

标签: dom css-selectors jsoup

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

注意:假设有效< tr>和< td>对于嵌套表并插入< pre>标签

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

          </tbody>
        </table>
      </tbody>
    </table>
  <body>
</html>

以下选择是否有效?

// This isn't selecting the node correctly?
Element tablebody = doc.body().select("table  > tbody > table > tbody").first();

Element pre = tablebody.appendElement("pre");
pre.text("hello");

1 个答案:

答案 0 :(得分:2)

这不是有效的标记。 table内的tbody不能直接存在。

如果您的内部表不在tr > td中,则该内部表实际上被构造为外部表的下一个兄弟。换句话说,你实际上根本没有内心表。

除非可以更正标记,否则你必须对待&#34;内部表&#34;作为以下兄弟姐妹:

Element tablebody = doc.body().select("table + table > tbody").first();

如果您可以更正标记,则可以使用缺少的trtd位来完成选择器:

Element tablebody = doc.body().select("table > tbody > tr > td > table > tbody").first();

或者简单地用子代选择器替换其中一个子选择器:

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

此外,tbody只能将tr元素作为子元素。您无法以{1}}的方式在pre内添加tbody元素。您可能希望选择中的第一个tr > td tbody并将其附加到那里。