【问题标题】:How to access nested divs using Jsoup如何使用 Jsoup 访问嵌套的 div
【发布时间】:2020-06-19 18:04:45
【问题描述】:

这是html页面:

<div class="doc_details">
  <fieldset style="border: 0pt">
    <div class="row">
      <div class="col-sm-6 col-md-6">
        <div class="row">
          <div class="col-sm-6 col-md-6">
            <b>Speciality</b>
          </div>
          <div class="col-sm-6 col-md-6">ABCD</div>
        </div>
        <div class="row">
          <div class="col-sm-6 col-md-6">
            <b>City</b>
          </div>
          <div class="col-sm-6 col-md-6">Ranchi</div>
        </div>
        <div class="row">
          <div class="col-sm-6 col-md-6">
            <b>Residence Address</b>
          </div>
          <div class="col-sm-6 col-md-6">Ranchi</div>
        </div>
        <div class="row">
          <div class="col-sm-6 col-md-6">
            <b>Business Address</b>
          </div>
          <div class="col-sm-6 col-md-6">Ranchi</div>
        </div>
      </div>
    </div>
  </fieldset>
</div>

我只想将 Speciality、city 和 address 列的值访问到一个变量中,如下所示:

Elements rows = doc.select("div.doc_details div.row div.row ");
Element row_div = rows.select("div.row").get(0);
doctor.speciality = row_div.select("div:eq(0)").text();

但即使我将get(0) 更改为get(1),我也无法仅获取变量中的值。

【问题讨论】:

    标签: java html jsoup


    【解决方案1】:

    您可能可以使用 css-selector 来做到这一点:

    doc.select("div.row > div.col-sm-6:nth-child(2)")
    

    返回这个:

    0 = {Element@754} "<div class="col-sm-6 col-md-6">\n  ABCD \n</div>"
    1 = {Element@756} "<div class="col-sm-6 col-md-6">\n  Ranchi \n</div>"
    2 = {Element@758} "<div class="col-sm-6 col-md-6">\n  Ranchi \n</div>"
    3 = {Element@760} "<div class="col-sm-6 col-md-6">\n  Ranchi \n</div>"
    

    这完全取决于您,例如,您可以将列表映射到每个 div 的文本:

        divs.stream().map(new Function<Element, String>() {
            @Override
            public String apply(Element element) {
                return element.text();
            }
        }).collect(Collectors.toList()));
    

    或更简单:

    String speciality = divs.get(0).text();
    String city = divs.get(1).text();
    String adress = divs.get(2).text();
    

    【讨论】:

    • 多么花哨! :) 非常好。
    【解决方案2】:

    试试这个:

    Elements rows = doc.select("div.doc_details div.row div.row ");
    Element row_div = rows.select("div.col-sm-6").get(1);
    doctor.speciality = row_div.text();
    

    告诉我它是否有效!

    【讨论】:

    • 这行得通:doctor.speciality = rows.select("div.col-sm-6").get(1).text();医生.city = rows.select("div.col-sm-6").get(3).text(); doctor.residence_address = rows.select("div.col-sm-6").get(5).text();但这不起作用:元素 ba = rows.select("div.col-sm-6").get(7); if(ba!=null) 医生.business_address = ba.text();
    【解决方案3】:

    我会这样做:

    Document doc = Jsoup.parse(html);
    Elements rows = doc.select("div.doc_details div.row div.row ");
    for (Element row : rows){
        Elements innerDivs = row.select("div");
        String header = innerDivs.get(1).text();
        String content = innerDivs.get(2).text();
        System.out.println("header = "+header+ " -> "+content);
    }
    

    我认为你在 css 选择器中弄错了!

    编辑:(感谢 OP,索引现在正确)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多