這篇文章主要為大家展示了“Android中如何實現(xiàn)XML解析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Android中如何實現(xiàn)XML解析”這篇文章吧。

首先創(chuàng)建在Android工程中創(chuàng)建一個Assets文件夾 app/src/main/assets

在這里添加一個名為 data.xml的文件,然后編輯這個文件,加入如下XML格式內(nèi)容
<?xml version="1.0" encoding="utf-8"?> <apps> <app> <id>1</id> <name>Google Maps</name> <version>1.0</version> </app> <app> <id>2</id> <name>Chrome</name> <version>2.1</version> </app> <app> <id>3</id> <name>Google play</name> <version>2.3</version> </app> </apps>
==============獲取XML中內(nèi)容================
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
//獲取XML文件的輸入流
InputStream fis = getResources().getAssets().open("data.xml");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
StringBuffer stringBuffer = new StringBuffer();
int mark = -1;
while ((mark = isr.read()) != -1) {
stringBuffer.append((char) mark);
}
String data = stringBuffer.toString();
//把整個文件內(nèi)容以String方式傳入
//parseXMLWithPull(data);
//parseXMLWithSAX(data);
} catch (IOException e) {
e.printStackTrace();
}
}==============Pull解析方式=================
獲取解析工具XmlPullParser:
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser();
傳入XML字符流:
xmlPullParser.setInput(new StringReader(xmlData));
根據(jù)節(jié)點特征進行處理:
switch ( xmlPullParser.getEventType() )
private void parseXMLWithPull(String xmlData) {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlData));
int eventType = xmlPullParser.getEventType();
String id = "";
String name = "";
String version = "";
while (eventType != xmlPullParser.END_DOCUMENT) {
String nodeName = xmlPullParser.getName();
switch (eventType) {
//開始解析某個節(jié)點
case XmlPullParser.START_TAG: {
if ("id".equals(nodeName)) {
id = xmlPullParser.nextText();
} else if ("name".equals(nodeName)) {
name = xmlPullParser.nextText();
} else if ("version".equals(nodeName)) {
version = xmlPullParser.nextText();
}
}
break;
//完成解析某個節(jié)點
case XmlPullParser.END_TAG: {
if ("app".equals(nodeName)) {
Log.d("woider", "id is " + id);
Log.d("woider", "name is " + name);
Log.d("woider", "version is " + version);
}
}
break;
}
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}==============SAX解析方式=================
使用SAX解析通常需要創(chuàng)建一個類繼承DefaultHandler,并重寫父類的五個方法
startDocument():開始XML解析的時候調(diào)用startElement():開始解析某個結(jié)點的時候調(diào)用characters():獲取節(jié)點中內(nèi)容的時候調(diào)用endElement():完成解析某個節(jié)點的時候調(diào)用endDocument():完成整個XML解析的時候調(diào)用
public class ContentHandler extends DefaultHandler {
private String nodeName;
private StringBuilder id;
private StringBuilder name;
private StringBuilder version;
@Override
public void startDocument() throws SAXException {
id = new StringBuilder();
name = new StringBuilder();
version = new StringBuilder();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
//記住當前結(jié)點名
nodeName = localName;
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//進行格式規(guī)范化
String str = new String(ch, start, length).trim();
//根據(jù)當前節(jié)點名添加內(nèi)容
if ("id".equals(nodeName)) {
id.append(str);
} else if ("name".equals(nodeName)) {
name.append(str);
} else if ("version".equals(nodeName)) {
version.append(str);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if ("app".equals(localName)) {
Log.d("woider", "id is " + id);
Log.d("woider", "name is " + name);
Log.d("woider", "version is " + version);
//清空StringBuilder
id.setLength(0);
name.setLength(0);
version.setLength(0);
}
}
@Override
public void endDocument() throws SAXException {
}
}獲取解析工具XMLReader:
SAXParserFactory factory = SAXParserFactory.newInstance(); XMLReader xmlReader = factory.newSAXParser().getXMLReader();
傳入規(guī)則到解析工具:
ContentHandler handler = new ContentHandler(); xmlReader.setContentHandler(handler);
開始執(zhí)行解析:
xmlReader.parse(new InputSource(new StringReader(xmlData)));
private void parseXMLWithSAX(String xmlData) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader xmlReader = factory.newSAXParser().getXMLReader();
ContentHandler handler = new ContentHandler();
//將ContentHandler的實例設置到XMLReader中
xmlReader.setContentHandler(handler);
//開始執(zhí)行解析
xmlReader.parse(new InputSource(new StringReader(xmlData)));
} catch (Exception e) {
e.printStackTrace();
}
}方法二(直接針對InputStream解析)
獲取解析工具SAXParser:
SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser();
獲取規(guī)則和輸入流:
handler = new ParserHandler();
InputStream inputStream = getResources().getAssets().open("data.xml");同時傳入開始解析:
parser.parse(inputStream, handler);
最后打印 LogCat 中的日志,data.xml的解析就完成了

除了 Pull 解析和 SAX 解析之外,還有一種 DOM 解析也非常重要。
另外還有一些XML解析工具,比如 JDOM 和 DOM4J,它們簡化了解析的步驟,提高了解析的效率。
以上是“Android中如何實現(xiàn)XML解析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享標題:Android中如何實現(xiàn)XML解析-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://chinadenli.net/article36/dsgpsg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、Google、自適應網(wǎng)站、靜態(tài)網(wǎng)站、全網(wǎng)營銷推廣、網(wǎng)站設計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容