XML檔案來源:高雄市腳踏車 (OpenData)
<BIKEStationData>
<BIKEStation>
<Station>
<StationID>1</StationID>
<StationNO>0019</StationNO>
<StationPic>http://www.c-bike.com.tw/Uploads/Station/1_s.JPG</StationPic>
<StationPic2>http://www.c-bike.com.tw/Uploads/Station/1_m.JPG</StationPic2>
<StationPic3>http://www.c-bike.com.tw/Uploads/Station/1_l.JPG</StationPic3>
<StationMap>http://www.c-bike.com.tw/Uploads/Station/1_map.png</StationMap>
<StationName>生態園區站</StationName>
<StationAddress>高雄市左營區博愛三路捷運R15生態園區站2號出口旁</StationAddress>
<StationLat>22.676995542475076</StationLat>
<StationLon>120.30648350715637</StationLon>
<StationDesc>生態園區站(R15-2號出口)來源引用-高雄市政府工務局.</StationDesc>
<StationNums1>26</StationNums1>
<StationNums2>2</StationNums2>
</Station>
<Station>
......
<BIKEStation>
<BIKEStationData>
程式碼內文:
private void doDataHandle()
{
new DataHandleAsyncTask().execute();
}
private class DataHandleAsyncTask extends AsyncTask<Void, Void, String>
{
@Override
protected void onPreExecute()
{
//這裡放背景執行之前要處理的事情。
}
@Override
protected String doInBackground(Void... params)
{
//這裡是整個非同步任務的核心所在,把要花時間執行的內容放在這裡。
try
{
//使用URL直接連結網址
URL urlUpdate = new URL("http://網址.xml");
//建立文件樣本
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
//將URL所指向的網址導入文件檔案
Document document = documentBuilder.parse(urlUpdate.openStream());
//針對xml文檔的元素做normalize
document.getDocumentElement().normalize();
Element root = document.getDocumentElement(); //取得檔案的"根"標籤
NodeList nodes = root.getElementsByTagName("BIKEStation"); //將"根"標籤進行指定項目的指派
Element SecondlevelElement = (Element) nodes.item(0); //取得第二層標籤
nodes = SecondlevelElement.getElementsByTagName("Station"); //將第二層進行指定標籤項目的指派
StationInfo temp = new StationInfo();
for(int i = 0; i < nodes.getLength(); i++)
{
Element thirdlevel = (Element)nodes.item(i); //取得第三層標籤
//接下來將要取得的第三層內容,藉由getElementsByTagName進行個別項目內容的抽取
temp.mStationID = Integer.valueOf(thirdlevel.getElementsByTagName("StationID").item(0).getTextContent());
temp.mStationNumber = Integer.valueOf(thirdlevel.getElementsByTagName("StationNO").item(0).getTextContent());
}
} catch (Exception e)
{ e.printStackTrace(); }
return null;
}
protected void onPostExecute()
{
//當doInBackground方法中的程式執行完畢後,接下來就會執行這裡。
}
}
注意項目:
(1). 要利用Android App擷取網路資源,就必須要另外開一個Thread來使用。由於作為測試的檔案資料並不是很大,所以使用AsyncTask(非同步任務)來進行抓取作業。
(2). xml文件裡面較常見的標籤位置有Attribute跟TextContent。
<StationID>test</StationID>的test要以getTextContent來取得;
<StationID id="1001">test</StationID>要以getAttribute來取得。
參考來源:
(1).使用AsyncTask執行非同步任務
(2).[Java]Parsing XML Data with DOM
(3).http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
<BIKEStation>
<Station>
<StationID>1</StationID>
<StationNO>0019</StationNO>
<StationPic>http://www.c-bike.com.tw/Uploads/Station/1_s.JPG</StationPic>
<StationPic2>http://www.c-bike.com.tw/Uploads/Station/1_m.JPG</StationPic2>
<StationPic3>http://www.c-bike.com.tw/Uploads/Station/1_l.JPG</StationPic3>
<StationMap>http://www.c-bike.com.tw/Uploads/Station/1_map.png</StationMap>
<StationName>生態園區站</StationName>
<StationAddress>高雄市左營區博愛三路捷運R15生態園區站2號出口旁</StationAddress>
<StationLat>22.676995542475076</StationLat>
<StationLon>120.30648350715637</StationLon>
<StationDesc>生態園區站(R15-2號出口)來源引用-高雄市政府工務局.</StationDesc>
<StationNums1>26</StationNums1>
<StationNums2>2</StationNums2>
</Station>
<Station>
......
<BIKEStation>
<BIKEStationData>
程式碼內文:
private void doDataHandle()
{
new DataHandleAsyncTask().execute();
}
private class DataHandleAsyncTask extends AsyncTask<Void, Void, String>
{
@Override
protected void onPreExecute()
{
//這裡放背景執行之前要處理的事情。
}
@Override
protected String doInBackground(Void... params)
{
//這裡是整個非同步任務的核心所在,把要花時間執行的內容放在這裡。
try
{
//使用URL直接連結網址
URL urlUpdate = new URL("http://網址.xml");
//建立文件樣本
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
//將URL所指向的網址導入文件檔案
Document document = documentBuilder.parse(urlUpdate.openStream());
//針對xml文檔的元素做normalize
document.getDocumentElement().normalize();
Element root = document.getDocumentElement(); //取得檔案的"根"標籤
NodeList nodes = root.getElementsByTagName("BIKEStation"); //將"根"標籤進行指定項目的指派
Element SecondlevelElement = (Element) nodes.item(0); //取得第二層標籤
nodes = SecondlevelElement.getElementsByTagName("Station"); //將第二層進行指定標籤項目的指派
StationInfo temp = new StationInfo();
for(int i = 0; i < nodes.getLength(); i++)
{
Element thirdlevel = (Element)nodes.item(i); //取得第三層標籤
//接下來將要取得的第三層內容,藉由getElementsByTagName進行個別項目內容的抽取
temp.mStationID = Integer.valueOf(thirdlevel.getElementsByTagName("StationID").item(0).getTextContent());
temp.mStationNumber = Integer.valueOf(thirdlevel.getElementsByTagName("StationNO").item(0).getTextContent());
}
} catch (Exception e)
{ e.printStackTrace(); }
return null;
}
protected void onPostExecute()
{
//當doInBackground方法中的程式執行完畢後,接下來就會執行這裡。
}
}
注意項目:
(1). 要利用Android App擷取網路資源,就必須要另外開一個Thread來使用。由於作為測試的檔案資料並不是很大,所以使用AsyncTask(非同步任務)來進行抓取作業。
(2). xml文件裡面較常見的標籤位置有Attribute跟TextContent。
<StationID>test</StationID>的test要以getTextContent來取得;
<StationID id="1001">test</StationID>要以getAttribute來取得。
參考來源:
(1).使用AsyncTask執行非同步任務
(2).[Java]Parsing XML Data with DOM
(3).http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
沒有留言:
張貼留言