我有一個cities.txt
文件放置在我的res/raw文件夾中。裏面包含以下內容。使用Jsoup解析特定文本
<div class="state">Alabama</div>
<ul><li><a href="http://auburn.org">auburn</a></li>
<li><a href="http://bham.org">birmingham</a></li> </ul>
<div class="state">Alaska</div>
<ul><li><a href="http://anchorage.org">anchorage</a></li>
<li><a href="http://fairbanks.org">fairbanks</a></li></ul>
<div class="state">Arizona</div>
<ul><li><a href="http://flagstaff.org">flagstaff</a></li>
<li><a href="http://mohave.org">mohave county</a></li></ul>
我想抓住城市爲狀態阿拉巴馬和一個ListView顯示。輸出應該是這樣的。
赤褐色
伯明翰
我當前的代碼抓住所有的六個城市,並顯示在ListView控件來代替。這是我的代碼。
package com.example.readfile;
import java.io.InputStream;
import java.util.ArrayList;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import android.app.Activity;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Cities extends Activity {
ListView listUSCities;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.city_layout);
listUSCities = (ListView) findViewById(R.id.listcities);
new MyTask().execute();
}
class MyTask extends AsyncTask<Void, Void, ArrayList<String>> {
ArrayList<String> arr_linkText = new ArrayList<String>();
@Override
protected ArrayList<String> doInBackground(Void... params) {
Document doc;
try {
Resources res = getResources();
InputStream in_s = res.openRawResource(R.raw.cities);
byte[] b = new byte[in_s.available()];
in_s.read(b);
// Parsing using Jsoup starts here
doc = Jsoup.parse(new String(b));
// Parsing the states
Elements links = doc.select("div");
for (Element link : links) {
if (link.text().contains("Alabama")) {
// Extracting the cities
Elements cities = doc.select("a");
for (Element city : cities) {
arr_linkText.add(city.text());
}
}
}
} catch (Exception e) {
// e.printStackTrace();
}
return arr_linkText; // << retrun ArrayList from here
}
@Override
protected void onPostExecute(ArrayList<String> result) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
Cities.this, android.R.layout.simple_list_item_1,
android.R.id.text1);
for (String temp_result : result) {
adapter.add(temp_result);
}
listUSCities.setAdapter(adapter);
}
}
}
我該如何提取城市只爲該特定狀態?
如何在提取城市以優化速度後停止解析文件?
實際的cities.txt
包含更多信息,我只提供了一個樣本。我會感謝你的幫助。謝謝!
這使它工作。我不得不修剪實際的文檔以使分析速度更快。感謝您的幫助! – Questions
很高興工作。修剪加快處理是一個很好的計劃。我只是想清楚,如果答案是基於樣本的結構! – iagreen