簡體   English   中英

如何使用 Jsoup 訪問嵌套的 div

[英]How to access nested divs using Jsoup

這是 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) ,我也無法僅獲取變量中的值。

您可能可以使用 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();

嘗試這個:

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();

告訴我它是否有效!

這是我將如何做到的:

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,索引現在是正確的)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM