1.XmlPullParser解析方式
xml文件格式:
<?xml version="1.0" encoding="utf-8"?>
<channel>
<item id="0" url="http://www.baidu.com">百度</item>
<item id="1" url="http://www.qq.com">腾讯</item>
<item id="2" url="http://www.sina.com.cn">新浪</item>
<item id="3" url="http://www.taobao.com">淘宝</item>
</channel>
package com.example.testafjalj;
import android.content.Context;
import android.content.res.AssetManager;
import android.util.Log;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.InputStream;
public class PullParserUtil {
private static final String TAG = "PullParserUtil";
public static void pullParserXmlMethod(Context context, String fileName, String nodeName) {
AssetManager assetManager = null;
InputStream inputStream = null;
XmlPullParserFactory xmlPullParserFactory = null;
XmlPullParser xmlPullParser = null;
try {
assetManager = context.getAssets();
inputStream = assetManager.open(fileName);
xmlPullParserFactory = XmlPullParserFactory.newInstance();
xmlPullParser = xmlPullParserFactory.newPullParser();
xmlPullParser.setInput(inputStream, "utf-8");
int eventType = xmlPullParser.getEventType();
StringBuilder node = new StringBuilder();
StringBuilder attribute = new StringBuilder();
StringBuilder content = new StringBuilder();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
if (nodeName.equals(xmlPullParser.getName())) {
node.append(xmlPullParser.getName());
int count = xmlPullParser.getAttributeCount();
for (int i = 0; i < count; i++) {
attribute.append(xmlPullParser.getAttributeName(i)).append(" : ")
.append(xmlPullParser.getAttributeValue(i)).append("#");
}
content.append(xmlPullParser.nextText());
}
break;
case XmlPullParser.TEXT:
Log.i(TAG, "get node is : " + node.toString() + " ; get attribute is : " + attribute.toString() + " ; get content is : " + content.toString());
node.setLength(0);
attribute.setLength(0);
content.setLength(0);
break;
}
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null)
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
PullParserUtil.pullParserXmlMethod(MainActivity.this, LOCAL_ASSETS_FILE_NAME, "item");
}
}).start();
}
2.Sax解析方式
xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<users>
<user id="0">
<name>Alexia</name>
<age>23</age>
<sex>Female</sex>
</user>
<user id="1">
<name>Edward</name>
<age>24</age>
<sex>Male</sex>
</user>
<user id="2">
<name>wjm</name>
<age>23</age>
<sex>Female</sex>
</user>
<user id="3">
<name>wh</name>
<age>24</age>
<sex>Male</sex>
</user>
</users>
package com.example.a10937959.testafjalj;
import android.content.Context;
import android.util.Log;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xmlpull.v1.XmlPullParser;
import java.io.InputStream;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SaxParserUtil {
public final static String TAG = "SaxParserUtil";
public static void saxParserMethod(Context context, String fileName) {
SAXParserFactory saxParserFactory = null;
SAXParser saxParser = null;
XMLReader xmlReader = null;
InputStream inputStream = null;
try {
saxParserFactory = SAXParserFactory.newInstance();
saxParser = saxParserFactory.newSAXParser();
xmlReader = saxParser.getXMLReader();
SaxParserHandler saxParserHandler = new SaxParserHandler();
xmlReader.setContentHandler(saxParserHandler);
inputStream = context.getAssets().open(fileName);
xmlReader.parse(new InputSource(inputStream));
} catch (Exception e) {
}
}
private static class SaxParserHandler extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
Log.i(TAG, "characters ch is : " + String.valueOf(ch) + " ; start is : " + start + " ; length is : " + length);
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
Log.i(TAG, "start element uri is : " + uri + " ; localName is : " + localName + " ; qName is : " + qName + " ; attributes is : " + attributes);
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
Log.i(TAG, "end element uri is : " + uri + " ; localName is : " + localName + " ; qName is : " + qName );
}
}
}
3.Dom解析
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<users>
<user id="0">
<name>Alexia</name>
<age>23</age>
<sex>Female</sex>
</user>
<user id="1">
<name>Edward</name>
<age>24</age>
<sex>Male</sex>
</user>
<user id="2">
<name>wjm</name>
<age>23</age>
<sex>Female</sex>
</user>
<user id="3">
<name>wh</name>
<age>24</age>
<sex>Male</sex>
</user>
</users>
代码如下:
package com.example.a10937959.testafjalj;
import android.content.Context;
import android.util.Log;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
public class DocumentParseUtil {
private final static String TAG = "DocumentParseUtil";
public static void documentParseMethod(Context context, String fileName, String queryNode) {
DocumentBuilderFactory documentBuilderFactory = null;
DocumentBuilder documentBuilder = null;
InputStream inputStream = null;
try {
documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilder = documentBuilderFactory.newDocumentBuilder();
inputStream = context.getAssets().open(fileName);
Document document = documentBuilder.parse(inputStream);
Element element = document.getDocumentElement();
NodeList nodeList = element.getElementsByTagName(queryNode);
Node node = null;
if (nodeList != null) {
for (int i = 0; i < nodeList.getLength(); i++) {
node = nodeList.item(i);
NodeList nodeList1 = node.getChildNodes();
if (nodeList1 != null && nodeList1.getLength() > 0) {
for (int j = 0; j < nodeList1.getLength(); j++) {
Node node1 = nodeList1.item(j);
}
} else {
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}