如何从div中获取文本值,并将类名分开?

时间:2014-01-14 09:33:40

标签: java jsoup

我是使用Jsoup的新手,我有一个问题是从div获取文本值,并将类名文本作为字符串。 这是想要废弃的字符串。

<body>
 <div class="details "> 
  <div class="title turquoise2">
    AAC-Olympia 
  </div> 
  <div class="subhead turquoise2">
    Correspondentie-adres: 
  </div> 
  <div class="text">
    Rijdt 37 
   <br /> 6631AP HORSSEN 
   <br /> 0487-541339 
  </div> 
  <div class="subhead turquoise2">
    Accommodatie: 
  </div> 
  <div class="text">
    Sportpark De Polenkamp 
   <br /> Bredestraat 3 
   <br /> 6631BC HORSSEN 
   <br /> 0487-541339 
  </div> 
  <div class="subhead turquoise2">
    Opgericht: 
  </div> 
  <div class="text">
    01-07-2011 
  </div> 
  <div class="subhead turquoise2">
    Tenue: 
  </div> 
  <div class="text">
    Shirt: Wit 
   <br /> Broek: Zwart 
   <br /> Kousen: Zwart 
  </div> 
  <div class="subhead turquoise2">
    Regio: 
  </div> 
  <div class="text">
    Veldregio: Regio 4 veld 
   <br /> Zaalregio: 
  </div> 
  <div class="subhead turquoise2">
    Info: 
  </div> 
  <div class="text">
    Relatienummer: NXTG36Z 
   <br /> Email: 
   <a href="mailto:janberg37@Caiway.nl">janberg37@Caiway.nl</a> 
   <br /> Website: 
   <a href="http://www.aac-olympia.nl">http://www.aac-olympia.nl</a> 
   <br /> District: Oost 
  </div> 
  <div class="subhead turquoise2">
    Klasse(s): 
  </div> 
  <div class="text">
    Klasse za: 
   <br /> Klasse zon: 5e klasse 
   <br /> Klasse zaal: 
   <br /> Junioren: Nee 
   <br /> Pupillen: Nee 
   <br /> Vrouwen: Nee 
   <br /> G-Voetbal: Nee 
  </div> 
  <div class="text"> 
   <a href="http://downloadcentrum.knvb.nl/sportlink/knvb/document/matrix%20verenigingen%20district%20oost?id=55988">Overzicht indeling district Oost</a> 
  </div> 
 </div> 
 <div class="details details-functionaris"> 
  <div class="title turquoise2">
    AAC-Olympia 
  </div> 
  <div class="voorzitter"> 
  </div> 
  <div class="secretaris"> 
  </div> 
  <div class="penningmeester"> 
  </div> 
  <div class="functionarissen"> 
  </div> 
 </div>
</body> 

我想从第二个div获取类名文本后面的信息,我尝试下面的代码,但给我空字符串,

Element Adres = finalDocument.getElementsByClass("text").get(1);
 String AllTextValue = Adres.text();//This give me all information from the div 

但我希望所有4个文本值分开,

String firstText =  For this one i have no ieee what i need to do
  String SecondText = Adres.getElementsByTag("br").get(0).text();//Returns Empty value
  String ThirdText  = Adres.getElementsByTag("br").get(1).text();//Returns Empty value
  String FourthText = Adres.getElementsByTag("br").get(2).text();//returns Empty value

有人可以帮助我吗? 非常感谢。

2 个答案:

答案 0 :(得分:1)

您要查找的文字不在 br 标记内 - 它在外面:
您使用<br /> abcd 为了使您的代码可以工作,它应该是:<br>abcd</br>(我很确定无效)

您应该使用列表而不是<br> - 就像这样:

<div class="text">
    Sportpark De Polenkamp 
   <li> Bredestraat 3 </li>
   <li> 6631BC HORSSEN </li>
   <li> 0487-541339 </li>
</div> 

然后你的逻辑应该有效。

不要忘记循环getElementsByTag的结果,而不是对.get(x)的硬编码调用,因为行数可能会发生变化。

只需注意 - 您可能需要为这些<li>元素指定单独的样式,以便文本显示时没有项目符号。

编辑:由于无法更改HTML,以下代码“应该”有效:

String SecondText = (TextNode)(Adres.getElementsByTag("br").get(0).nextSibling()).text();

这应该得到br元素,请求后面的Node - 应该是包含您看到的实际文本的TextNode。然后从TextNode

中获取文本

此代码存在两个问题:

  1. 我从未使用过Jsoup - 所以我不知道这是否有用,我的答案基于我的DOM知识。
  2. 这看起来像一个非常容易出错的代码,如果/当网站更改结构时可能会失败 - 您应该创建一个方法来获取文本并处理该方法中的所有错误条件。
  3. 检查Jsoup javadocs如何使用他们的API:http://jsoup.org/apidocs/org/jsoup/nodes/Element.html

答案 1 :(得分:1)

你可以拆分字符串并从那里开始。例如:

Element Adres = finalDocument.getElementsByClass("text").get(1);

String[] addressParts = Adres.html().split("<br />");

for (String s : addressParts) {
    System.out.println(s.trim());
}

将输出:

Sportpark De Polenkamp
Bredestraat 3
6631BC HORSSEN
0487-541339

要访问地址的各个部分,只需调用索引(从0到3有效,因为有4行),例如addressParts[1].trim();。我添加trim()的原因是为了删除最初拆分时String周围的空白区域。