❶ android中的xml文件中文亂碼怎麼解決
一、android sax庫遇到gbk或gb2312編碼時
方法1. 可以顯示的指明編碼比如
InputSource is = new InputSource(inputStream); is.setEncoding("UTF-8");
方法2. 使用InputStreamReader轉換 在SDK中可以查看有這樣實例化方法,參數二為字元集
InputStreamReader(InputStream in, Charset charset)
具體使用可以是
InputSource is=new InputSource(new InputStreamReader(inputStream,"gb2312"));
有關InputSource的細節, 如果有字元流可用,則解析器將直接讀取該流,而忽略該流中找到的任何文本編碼聲明。如果沒有字元流,但卻有位元組流,則解析器將使用該位元組流,從而使 用在 InputSource 中指定的編碼,或者另外(如果未指定編碼)通過使用某種諸如 XML 規范 中的演算法演算法自動探測字元編碼。如果既沒有字元流,又沒有位元組流可用,則解析器將嘗試打開到由系統標識符標識的資源的 URI 連接 。
二、android開發網提倡盡量在伺服器上配置使用utf-8編碼,雖然顯示英文字元較為兩非,但是兼容性是最好的,也是國際最主流的標准。
❷ android里的XML文件是用什麼寫的
XML (eXtensible Markup Language)即可擴展標記語言,它與HTML一樣,都是SGML(Standard Generalized Markup Language,標准通用標記語言)。Xml是Internet環境中跨平台的,依賴於內容的技術,是當前處理結構化文檔信息的有力工具。擴展標記語言XML是一種簡單的數據存儲語言,使用一系列簡單的標記描述數據,而這些標記可以用方便的方式建立,雖然XML佔用的空間比二進制數據要佔用更多的空間,但XML極其簡單易於掌握和使用。 XML與Access,Oracle和SQL Server等資料庫不同,資料庫提供了更強有力的數據存儲和分析能力,例如:數據索引、排序、查找、相關一致性等,XML僅僅是展示數據。事實上XML與其他數據表現形式最大的不同是:他極其簡單。這是一個看上去有點瑣細的優點,但正是這點使XML與眾不同。 XML與HTML的設計區別是:XML是用來存儲數據的,重在數據本身。而HTML是用來定義數據的,重在數據的顯示模式。 XML的簡單使其易於在任何應用程序中讀寫數據,這使XML很快成為數據交換的唯一公共語言,雖然不同的應用軟體也支持其它的數據交換格式,但不久之後他們都將支持XML,那就意味著程序可以更容易的與Windows、Mac OS, Linux以及其他平台下產生的信息結合,然後可以很容易載入XML數據到程序中並分析他,並以XML格式輸出結果。
❸ android解析xml後存入資料庫
你好!
一般是全部解析完,再存入資料庫,而且存入資料庫採用事務,這樣可以減少操作時間,數據量大時效果明顯。
僅代表個人觀點,不喜勿噴,謝謝。
❹ android裡面怎麼解析xml
Android解析xml文件總共有三種方法,分別是:
SAX解析XML文件:SAX是一個解析速度快並且佔用內存少的xml解析器,非常適合用於Android等移動設備。SAX解析XML文件採用的是事件驅動,也就是說,它並不需要解析完整個文檔,在按內容順序解析文檔的過程中,SAX會判斷當前讀到的字元是否合法XML語法中的某部分,如果符合就會觸發事件。所謂事件,其實就是一些回調(callback)方法,這些方法(事件)定義在ContentHandler介面。如下代碼:
java">publicstaticList<Person>readXML(InputStreaminStream){
try{
//創建解析器
SAXParserFactoryspf=SAXParserFactory.newInstance();
SAXParsersaxParser=spf.newSAXParser();
//設置解析器的相關特性,true表示開啟命名空間特性
saxParser.setProperty("http://xml.org/sax/features/namespaces",true);
XMLContentHandlerhandler=newXMLContentHandler();
saxParser.parse(inStream,handler);
inStream.close();
returnhandler.getPersons();
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}
//SAX類:DefaultHandler,它實現了ContentHandler介面。在實現的時候,只需要繼承該類,重載相應的方法即可。
{
privateList<Person>persons=null;
privatePersoncurrentPerson;
privateStringtagName=null;//當前解析的元素標簽
publicList<Person>getPersons(){
returnpersons;
}
//接收文檔開始的通知。當遇到文檔的開頭的時候,調用這個方法,可以在其中做一些預處理的工作。
@Override
publicvoidstartDocument()throwsSAXException{
persons=newArrayList<Person>();
}
//接收元素開始的通知。當讀到一個開始標簽的時候,會觸發這個方法。其中namespaceURI表示元素的命名空間;
//localName表示元素的本地名稱(不帶前綴);qName表示元素的限定名(帶前綴);atts表示元素的屬性集合
@Override
publicvoidstartElement(StringnamespaceURI,StringlocalName,StringqName,Attributesatts)throwsSAXException{
if(localName.equals("person")){
currentPerson=newPerson();
currentPerson.setId(Integer.parseInt(atts.getValue("id")));
}
this.tagName=localName;
}
//接收字元數據的通知。該方法用來處理在XML文件中讀到的內容,第一個參數用於存放文件的內容,
//後面兩個參數是讀到的字元串在這個數組中的起始位置和長度,使用newString(ch,start,length)就可以獲取內容。
@Override
publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{
if(tagName!=null){
Stringdata=newString(ch,start,length);
if(tagName.equals("name")){
this.currentPerson.setName(data);
}elseif(tagName.equals("age")){
this.currentPerson.setAge(Short.parseShort(data));
}
}
}
//接收文檔的結尾的通知。在遇到結束標簽的時候,調用這個方法。其中,uri表示元素的命名空間;
//localName表示元素的本地名稱(不帶前綴);name表示元素的限定名(帶前綴)
@Override
publicvoidendElement(Stringuri,StringlocalName,Stringname)throwsSAXException{
if(localName.equals("person")){
persons.add(currentPerson);
currentPerson=null;
}
this.tagName=null;
}
}
DOM解析XML文件: DOM解析XML文件時,會將XML文件的所有內容讀取到內存中,然後允許您使用DOM API遍歷XML樹、檢索所需的數據。使用DOM操作XML的代碼看起來比較直觀,並且,在某些方面比基於SAX的實現更加簡單。但是,因為DOM需要將XML文件的所有內容讀取到內存中,所以內存的消耗比較大,特別對於運行Android的移動設備來說,因為設備的資源比較寶貴,所以建議還是採用SAX來解析XML文件,當然,如果XML文件的內容比較小採用DOM是可行的。
Pull解析器解析XML文件: Pull解析器的運行方式與 SAX 解析器相似。它提供了類似的事件,如:開始元素和結束元素事件,使用parser.next()可以進入下一個元素並觸發相應事件。事件將作為數值代碼被發送,因此可以使用一個switch對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法可以獲取下一個Text類型元素的值
❺ android 怎麼把數據輸出到xml
android中,不能直接訪問和讀取xml文件中的數據。 只能先把xml的數據解析出來,存儲在集合或者資料庫里,再進行增刪改查,如需要將xml文件的內容更新,就重寫個文件替換。
❻ android解析xml用什麼開源庫
Android並未提供對Java StAX API的支持。但是,Android附帶了一個pull解析器,其工作方式類似於StAX。它允許用戶的應用程序代碼從解析器中獲取事件,這與SAX解析器自動將事件推入處理程序相反。
PULL解析器的運行方式和SAX類似,都是基於事件的模式。不同的是,在PULL解析過程中返回的是數字,且我們需要自己獲取產生的事件然後做相應的操作,而不像SAX那樣由處理器觸發一種事件的方法,執行我們的代碼。
讀取到xml的聲明返回 START_DOCUMENT;
讀取到xml的結束返回 END_DOCUMENT ;
讀取到xml的開始標簽返回 START_TAG
讀取到xml的結束標簽返回 END_TAG
讀取到xml的文本返回 TEXT
PULL解析器小巧輕便,解析速度快,簡單易用,非常適合在Android移動設備中使用,Android系統內部在解析各種XML時也是用PULL解析器,Android官方推薦開發者們使用Pull解析技術。Pull解析技術是第三方開發的開源技術,它同樣可以應用於JavaSE開發。
PULL 的工作原理:XML pull提供了開始元素和結束元素。當某個元素開始時,我們可以調用parser.nextText從XML文檔中提取所有字元數據。當解釋到一個文檔結束時,自動生成EndDocument事件。
常用的XML pull的介面和類:
XmlPullParser:XML pull解析器是一個在XMLPULL VlAP1中提供了定義解析功能的介面。
XmlSerializer:它是一個介面,定義了XML信息集的序列。
XmlPullParserFactory:這個類用於在XMPULL V1 API中創建XML Pull解析器。
XmlPullParserException:拋出單一的XML pull解析器相關的錯誤。
❼ 什麼是xml,什麼android的xml,android的xml文件有什麼用
xml 全名可擴展標記語言。和html文件差不多。
在android中經常來編寫應用的UI界面
列如:
❽ android xml 中 怎麼顯示
顯示什麼呢?歡迎追問
❾ 新手使用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();
}
❿ android xml解析
可以用dom4j或其它框架解析
//將xml字元串解析xml文檔,如果是文件,則用以下方法。
//SAXReaderreader=newSAXReader();
//reader.setEncoding("UTF-8");
//FileInputStreamis=newFileInputStream(file);
//Documentdocument=reader.read(is);
Documentdocument=DocumentHelper.parseText(xml);
//獲取根元素
ElementrootElement=document.getRootElement();
//獲取所有row標簽的元素集合
Listlist=rootElement.elements("row");
//獲取單個count標簽
Elementelement=rootElement.element("count");
//獲取element的內容,這里count標簽的內容是"2"
Stringtext=element.getTest();
//其它的都可以用類似的方法獲取。也可以用elementIterator(),結果集是Iterator類型