首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Jsoup逐个从HTML标记中提取文本

用Jsoup逐个从HTML标记中提取文本
EN

Stack Overflow用户
提问于 2014-03-21 12:52:08
回答 1查看 1.6K关注 0票数 1

我正在尝试从带有内容的html标记字符串中提取文本。

例如:

代码语言:javascript
复制
<CalaisSimpleOutputFormat>
  <Country count="13" relevance="0.771" normalized="China">China</Country>
  <Country count="4" relevance="0.598">Taiwan</Country>
  <City count="3" relevance="0.491" normalized="Beijing,China">Beijing</City>
  <NaturalFeature count="3" relevance="0.415">Yellow river</NaturalFeature>
  <Organization count="2" relevance="0.491">Communist Party</Organization>
  <Region count="2" relevance="0.258">Central Asia</Region>
  <Region count="2" relevance="0.315">East Asia</Region>
  <City count="1" relevance="0.304" normalized="Shanghai,China">Shanghai</City>
  <City count="1" relevance="0.304" normalized="Chongqing,China">Chongqing</City>
  <City count="1" relevance="0.101" normalized="Taipei,Taiwan">Taipei</City>
  <City count="1" relevance="0.304" normalized="Tianjin,China">Tianjin</City>
  <Continent count="1" relevance="0.053">Asia</Continent>
  <Country count="1" relevance="0.101" normalized="Japan">Japan</Country>
  <Country count="1" relevance="0.304" normalized="Macau">Macau</Country>
  <MedicalCondition count="1" relevance="0.160">hereditary monarchies</MedicalCondition>
  <NaturalFeature count="1" relevance="0.254">Himalaya</NaturalFeature>
  <NaturalFeature count="1" relevance="0.274">Gobi desert</NaturalFeature>
  <NaturalFeature count="1" relevance="0.208">Yellow sea</NaturalFeature>
  <NaturalFeature count="1" relevance="0.208">Pacific Ocean</NaturalFeature>
  <NaturalFeature count="1" relevance="0.291">Great Lakes</NaturalFeature>
  <NaturalFeature count="1" relevance="0.231">Yangtze river</NaturalFeature>
  <NaturalFeature count="1" relevance="0.274">Taklamakan desert</NaturalFeature>
  <NaturalFeature count="1" relevance="0.208">South China sea</NaturalFeature>
  <NaturalFeature count="1" relevance="0.231">Tibetan Plateau</NaturalFeature>
  <NaturalFeature count="1" relevance="0.208">Bohai sea</NaturalFeature>
  <NaturalFeature count="1" relevance="0.208">East sea</NaturalFeature>
  <NaturalFeature count="1" relevance="0.254">Tian Shan mountain ranges</NaturalFeature>
  <Organization count="1" relevance="0.062">G-20</Organization>
  <Organization count="1" relevance="0.073">U.N. Security Council</Organization>
  <Organization count="1" relevance="0.062">APEC</Organization>
  <Organization count="1" relevance="0.062">BRICS</Organization>
  <Organization count="1" relevance="0.062">BCIM</Organization>
  <Organization count="1" relevance="0.073">United Nations</Organization>
  <Organization count="1" relevance="0.062">Shanghai Cooperation Organisation</Organization>
  <Organization count="1" relevance="0.062">World Trade Organization</Organization>
  <Organization count="1" relevance="0.105">ROC government</Organization>
  <Position count="1" relevance="0.073">permanent member</Position>
  <Region count="1" relevance="0.208">East China</Region>
  <Region count="1" relevance="0.208">South China</Region>
  <Region count="1" relevance="0.254">South Asia</Region>
  <Region count="1" relevance="0.184">North China</Region>
  <Topics>
     <Topic Taxonomy="Calais" Score="0.558">Politics</Topic>
     <Topic Taxonomy="Calais" Score="0.534">War_Conflict</Topic>
  </Topics>
</CalaisSimpleOutputFormat>

代码已成功地从thoes标记中提取出文本,输出如下:

代码语言:javascript
复制
ChinaChongqingShanghaiTaipeiTianjin................

我想知道是否有一种方法可以一个一个地提取文本,或者用空格分割文本,这样我就可以将它存储到列表中。例如:

代码语言:javascript
复制
China
Chongqing
Shanghai
Taipei
......

我试过这样的密码:

代码语言:javascript
复制
Document doc = Jsoup.parse(html);
for (Element a : doc.select("CalaisSimpleOutputFormat")) {
    System.out.println(a.text());
}

代码语言:javascript
复制
for (Node child : XX.childNodes()) {
    if (child instanceof TextNode) {
        System.out.println(((TextNode) child).text());
    }
}

代码语言:javascript
复制
Document doc = Jsoup.parse(html);
Element start = doc.select("CalaisSimpleOutputFormat").first();
String text = start.text();

都不起作用..。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-21 13:18:06

此程序正在将所需数据保存到ArrayList对象中。

代码语言:javascript
复制
 package com.loknath.lab;


/*
*@Author Loknath 
*/

 import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.parser.Tag;
 import org.jsoup.select.Elements;

 public class Test {

public static void main(String[] args) {
    ArrayList list = new ArrayList();
    Test test = new Test();
    String file = "OCtest.txt";
    try {
        list = test.entityExtractionByFile(file);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println(list);
}

public ArrayList entityExtractionByFile(String fileLocation)
        throws FileNotFoundException {
    String content;
    ArrayList list = new ArrayList();
    // You may want to change to sth else to read in the file as string
    FileToString fileIn = new FileToString();
    content = fileIn.convertFile(fileLocation);

    Document doc = Jsoup.parse(content);

    Element element = doc.select("CalaisSimpleOutputFormat").first();
    Elements divChildren = element.children();

    Elements detachedDivChildren = new Elements();
    for (Element elem : divChildren) {
        Element detachedChild = new Element(Tag.valueOf(elem.tagName()),
                elem.baseUri(), elem.attributes().clone());
        detachedDivChildren.add(detachedChild);
    }
    for (Element elem : divChildren) {

        list.add(elem.ownText());
        System.out.println(elem.ownText());

    }
    return list;
}
}

输出:

代码语言:javascript
复制
China
Taiwan
Beijing
.
 .
.
.

用于整个源代码[点击这里.]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22559335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档