Ⅰ 關於android自定義xml文件 調用、讀取、使用pull方式解析得到集合並作為數據源綁定到listView上顯示
的inputStream讀取文件,讀取完成後記得inputStream.close()。 4.調用AssetManager.close()關閉AssetManager。 這個布局是需要在xml布局。
Ⅱ android 怎麼讀取res下的xml
相當於讀取res下面的文件,讀取成string類型,然後在通過xml解析器解析就行。下面是讀取res下面文件的例子,請看截圖,例子來自android學習手冊,android學習手冊,裡面有源碼。android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼
方法一、將要讀取的txt文件拷貝到Android工程目錄下的assets文件夾下
方法二、在res文件夾下新建raw文件夾,將txt拷貝到該目錄下
本方法是從assets中讀取
/**
* 從assets中讀取txt
*/
private void readFromAssets() {
try {
InputStream is = getAssets().open("qq.txt");
String text = readTextFromSDcard(is);
textView.setText(text);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
本方法是從raw中讀取
/**
* 從raw中讀取txt
*/
private void readFromRaw() {
try {
InputStream is = getResources().openRawResource(R.raw.qq);
String text = readTextFromSDcard(is);
textView.setText(text);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
本方法是解析輸入流,返回txt中的字元串
/**
* 按行讀取txt
*
* @param is
* @return
* @throws Exception
*/
private String readTextFromSDcard(InputStream is) throws Exception {
InputStreamReader reader = new InputStreamReader(is);
BufferedReader bufferedReader = new BufferedReader(reader);
StringBuffer buffer = new StringBuffer("");
String str;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
buffer.append("
");
}
return buffer.toString();
}
Ⅲ 新手使用android的XML(DOM)解析問題,指定路徑XML如何讀取
一、在Android應用中的XML文件來源
1、本地xml文件
本地XML文件可以放在應用根目錄assets文件夾、res/xml、res/raw、SDcard卡、應用的data目錄等;
除res/xml可直接通過getXml(int id)獲取XML文檔,返回一個解析器對象(XmlResourceParer:XmlResourceParer是XmlPullParser的子類),其它位置情況都可以獲取XML文檔,返回一個Inputstream對象,進行讀取數據,獲取方法分別如下:
a.在res/xml目錄下(推薦使用):
[java] view plain
XmlResourceParser xmlParser = this.getResources().getXml(R.xml.XXX);
b.在res/xml、res/raw目錄下:
[java] view plain
InputStream inputStream = this.getResources().openRawResource(R.xml.XXX);
c.在assets文件夾下(本人測試發現通過此方法獲取的XML文檔不能帶有首行:<?xml version="1.0" encoding="utf-8"?>,否則解析報錯,具體原因未查明,知道原因請回復交流):
[java] view plain
InputStream inputStream = getResources().getAssets().open(fileName);
d.在應用指定目錄下(SDcard,應用data目錄等):
[java] view plain
// path路徑根據實際項目修改,此次獲取SDcard根目錄
String path = Environment.getExternalStorageDirectory().toString();
File xmlFlie = new File(path+fileName);
InputStream inputStream = new FileInputStream(xmlFlie);
2、通過url得到的xml文件
很多時候需要解析xml文件都用於客戶端與伺服器之間的數據交互,比如解析google天氣預報信息,或自己項目內定的一些XML數據結構,其中通過URL,使用DefaultHTTPClient get請求獲取XML文件方法如下:
[java] view plain
/**
* 讀取url的xml資源 轉成String
* @param url
* @return 返回 讀取url的xml字元串
*/
public String getStringByUrl(String url) {
String outputString = "";
// DefaultHttpClient
DefaultHttpClient httpclient = new DefaultHttpClient();
// HttpGet
HttpGet httpget = new HttpGet(url);
// ResponseHandler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try {
outputString = httpclient.execute(httpget, responseHandler);
outputString = new String(outputString.getBytes("ISO-8859-1"), "utf-8"); // 解決中文亂碼
Log.i("HttpClientConnector", "連接成功");
} catch (Exception e) {
Log.i("HttpClientConnector", "連接失敗");
e.printStackTrace();
}
httpclient.getConnectionManager().shutdown();
return outputString;
}
二、XML文件的解析方式
能夠運用在Android系統上解析XML文件的常用有三種方式:DOM、SAX和PULL,其中DOM解析XML是先把XML文件讀進內存中,再通過介面獲取數據,該方法使用相對小的XML文件,移動設備往往受硬體性能影響,如果XML文件比較大使用DOM解析往往效率跟不上;SAX和PULL都是採用事件驅動方式來進行解析,在Android中的事件機制是基於回調函數。
本例旨在考慮簡單方便性,綜合考慮選擇了PULL解析,PULL解析器是一個開源項目,Android平台已經內置了PULL解析器,同時Android系統本身也是使用PULL解析器來解析各種XML文檔。
1、事件回調類型
PULL解析XML文件時,回調XmlResourceParser內定義表示文檔開頭結束和節點開頭結束的數值(事件回調類型),表示如下:
a.讀取到XML文檔開頭(聲明)返回:XmlPullParser.START_DOCUMENT(0)
b.讀取到XML文檔結束返回:XmlPullParser.END_DOCUMENT (1)
c.讀取到XML節點開始返回:XmlPullParser.START_TAG (2)
d.讀取到XML節點結束返回:XmlPullParser.END_TAG (3)
e.讀取到XML文本返回:XmlPullParser.TEXT (4)
2、XmlPullParser有幾個主要方法(更多查閱Android APIs):
a.XmlPullParser.getEventType() : Returns the type of the current event (START_TAG, END_TAG, TEXT, etc.) 【獲取當前事件回調類型】
b.XmlPullParser.getName():For START_TAG or END_TAG events, the (local) name of the current element is returned when namespaces are enabled.【獲取當前節點名字】
c.XmlPullParser.getAttributeValue(int index):Returns the given attributes value.【根據id獲取節點屬性值】
d.XmlPullParser.getAttributeValue(String namespace, String name):Returns the attributes value identified by namespace URI and namespace localName.【根據name獲取節點屬性值】
e.XmlPullParser.netxText():If current event is START_TAG then if next element is TEXT then element content is returned or if next event is END_TAG then empty string is returned, otherwise exception is thrown.【回調節點START_TAG時,通過此方法獲取節點內容】
3、實際編碼中如何使用
在實際編碼中,主要根據事件回調類型,結合被解析的XML結構進行解析提取數據,PULL解析XML文件的主要模式如下,更具體使用看本文提供的例子:
[java] view plain
try {
//開始解析事件
int eventType = parser.getEventType();
//處理事件,不碰到文檔結束就一直處理
while (eventType != XmlPullParser.END_DOCUMENT) {
//因為定義了一堆靜態常量,所以這里可以用switch
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
// 不做任何操作或初開始化數據
break;
case XmlPullParser.START_TAG:
// 解析XML節點數據
// 獲取當前標簽名字
String tagName = parser.getName();
if(tagName.equals("XXXTAGXXX")){
// 通過getAttributeValue 和 netxText解析節點的屬性值和節點值
}
break;
case XmlPullParser.END_TAG:
// 單節點完成,可往集合里邊添加新的數據
break;
case XmlPullParser.END_DOCUMENT:
break;
}
// 別忘了用next方法處理下一個事件,不然就會死循環
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
Ⅳ 手機怎麼打開XML文件
xml文件即可擴展標記語言。可擴展標記語言,標准通用標記語言的子集,一種用於標記電子文件使其具有結構性的標記語言。
它可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。 它非常適合萬維網傳輸,提供統一的方法來描述和交換獨立於應用程序或供應商的結構化數據。
下面教你怎麼打開xml文件的方法和軟體。
xml文件怎麼打開的方法:其實最簡單的就是用EXCEL表格打開了
如何在Excel 中打開文件
當您, Excel 中打開 XML 文件將提示您以選擇要導入 XML 數據的下列方法之一:
作為 XML 列表
作為只讀工作簿
使用 XML 源任務窗格
打開該文件作為 XML 列表
當您打開一個 XML 源, Excel 尋找用於 XML 樣式表 (XSL) 標記。 XSL 說明數據是如何以顯示 如果標記是存在, Excel 提示與選擇, 或不應用樣式表。 如果您選擇要應用一個 XSL, XSL 規定如何呈現數據 ; 這里, 其餘部分與本文此部分中信息不適用。
如果沒有 XSL 標記, 沒有收到以下消息:
指定 XML 源沒有引用到架構。 Excel 將創建基於 XML 源數據架構。
然後 Excel 導入 XML 源中數據。 通過多行如果 XML 數據包含重復欄位內元素, Excel 傳播數據。 每一行包含一個唯一的數據集。 這會導致 XML 才能顯示為 Excel 中的行大數字中小的數據集。
打開該文件作為只讀工作簿
當您選擇要打開一個 XML 源文檔作為只讀工作簿, 第一個標記的元素使用像標題並且單元格 A 1 中放置。 其餘的標記是按字母順序排序, 跨第二行放置。 作為只讀工作簿打開它時將被分為天氣報告示例本文中前面: 列標題下面列表
/ 區域 / 城市
/ 區域 / 國家
/ 區域 / 地區
/ 區域 / 狀態
Ⅳ 如何獲取android 下的StreamingAssets文件夾中的xml文件
assets文件夾裡面的文件都是保持原始的文件格式,需要用AssetManager以位元組流的形式讀取文件。
assets的讀取方式:
1. 先在Activity裡面調用getAssets() 來獲取AssetManager引用。
2. 再用AssetManager的open(String fileName, int accessMode) 方法則指定讀取的文件以及訪問模式就能得到輸入流InputStream。
3. 然後就是用已經open file 的inputStream讀取文件,讀取完成後記得inputStream.close() 。
4.調用AssetManager.close() 關閉AssetManager。
需要注意的是,來自Resources和Assets 中的文件只可以讀取而不能進行寫的操作
Ⅵ 怎麼讀取xml文件,具體步驟是
讀取是什麼意思?您是要打開一個XML文件嗎?
如果雙擊文件名,它就會在瀏覽器中打開。如果想編輯XML文件,用任何的文本編輯器(記事本等)或Office軟體(Word、Excel)都可以。
Ⅶ android 創建一個XML文件,如何在讀這個XML文件時,得到讀取的時間
回答:格式自定,按照程序編寫,回即得讀取時間。
方法步驟:如下
一、布局界面
二、寫一個xml文件
[java] view plain
三、寫一個和xml相對應的bean
[java] view plain
<span style="color:#000000;">[java] view plainprint?
package com.example.lession04_pull.domain;
四、寫一個Pul的服務類
[java] view plain
<span style="color:#000000;">[java] view plainprint?
package com.example.lession04_pull.service;
// 解析文件
xmlPullParser.setInput(is, "UTF-8");
//獲取解析的事件類型
int eventType=xmlPullParser.getEventType();
//判斷文件解析的是否完畢
while(eventType!=XmlPullParser.END_DOCUMENT){
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
persons=new ArrayList<Person>();
break;
//創建person對象
currentPerson=new Person();
currentPerson.setId(Integer.parseInt(xmlPullParser
.getAttributeValue(null, "id")));
}else if("name".equals(tagName)){
currentPerson.setName(xmlPullParser.nextText());
//把person對象放到集合中去
persons.add(currentPerson);
currentPerson=null;
// 寫入
public boolean write(List<Person> persons) {
// 採用pull解析進行實現
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 獲取sdcard目錄 文件對象
File sdCardDir = Environment.getExternalStorageDirectory();
// 創建文件
File file = new File(sdCardDir, "mycsdn.xml");
XmlSerializer serializer = Xml.newSerializer();
FileOutputStream fos = null;
try {
// 根據文件對象創建一個文件的輸出流對象
fos = new FileOutputStream(file);
// 設置輸出的流及編碼
serializer.setOutput(fos, "UTF-8");
// 設置文件的開始
serializer.startDocument("UTF-8", true);
// persons標簽開始
serializer.startTag(null, "persons");
for (Person person : persons) {
// person標簽的開始
serializer.startTag(null, "person");
// 設置person標簽的屬性
serializer.attribute("null", "id", person.getId() + "");
// 設置person標簽的子標簽 name
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
// 設置person標簽的子標簽的age
serializer.startTag(null, "age");
serializer.text(person.getAge() + "");
serializer.endTag(null, "age");
// person標簽的結束
serializer.endTag(null, "person");
}
// persons標簽的結束
serializer.endTag(null, "persons");
補充說明:
有些時候,我們需要生成一個XML文件,生成XML文件的方法有很多,如:可以只使用一個StringBuilder組拼XML內容,然後把內容寫入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,這里推薦使用Pull解析器。
Ⅷ 手機網頁怎麼讀取本地xml文件
嗯! 你直接response出來不就好了嗎?只是在那個表頭和類型那裡設置好就行了!其實也就是當作流輸出
Ⅸ android程序中 客戶端如何用pull 讀取遠程伺服器上的xml文件 請給出代碼。謝謝。
可以用 httpclient get到這個xml
然後把這個流交給pull解析器解析就完了
//獲取xml文件流
URL url = new URL("http://www.sohu.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5* 1000);//設置連接超時
conn.setRequestMethod(「GET」);//以get方式發起請求
if (conn.getResponseCode() != 200) throw new RuntimeException("請求url失敗");
InputStream is = conn.getInputStream();//得到網路返回的輸入流
conn.disconnect();
//解析xml
List<Person> persons = readXML(is);
public static List<Person> readXML(InputStream inStream) {
XmlPullParser parser = Xml.newPullParser();
try {
parser.setInput(inStream, "UTF-8");
int eventType = parser.getEventType();
Person currentPerson = null;
List<Person> persons = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT://文檔開始事件,可以進行數據初始化處理
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG://開始元素事件
String name = parser.getName();
if (name.equalsIgnoreCase("person")) {
currentPerson = new Person();
currentPerson.setId(new Integer(parser.getAttributeValue(null, "id")));
} else if (currentPerson != null) {
if (name.equalsIgnoreCase("name")) {
currentPerson.setName(parser.nextText());// 如果後面是Text節點,即返回它的值
} else if (name.equalsIgnoreCase("age")) {
currentPerson.setAge(new Short(parser.nextText()));
}
}
break;
case XmlPullParser.END_TAG://結束元素事件
if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {
persons.add(currentPerson);
currentPerson = null;
}
break;
}
eventType = parser.next();
}
inStream.close();
return persons;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
Ⅹ android讀取xml文件問題
你先在android項目中新建一個assets文件夾,然後在文件夾內放入你的personal.xml就行了。不是放在電腦硬碟上,讀取的時候就是getAssets().open("personal.xml");就行了