您的位置:首页 > 移动开发 > Android开发

Android 从Java后台取数据之解析XML

2017-02-26 15:10 309 查看
Android 从Java后台取数据。数据格式一般有两种,XML和JSON。下面我给大家分享一下解析XML的三种方式。

第一种:使用DOM解析(原生态)

try {
//1 使用DOM解析
//得到DOM工厂
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
Document document=builder.parse(is);
//获取根标签
Element root=document.getDocumentElement();
Log.i("tt","根标签:"+root);
//获取根节点
NodeList nodeList=root.getElementsByTagName("pstudent");
for (int i = 0; i < nodeList.getLength(); i++) {
Element element= (Element) nodeList.item(i);
//获取标签的属性name
String uid=element.getAttribute("name");
//获取子标签<uname><age>
Element e1= (Element) element.getElementsByTagName("uname").item(0);
String uname=e1.getTextContent();
Element e2= (Element)element.getElementsByTagName("age").item(0);
String age=e2.getTextContent();

User user=new User(uid,uname,age);
listUser1.add(user);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}*/


第二种:2.SAX解析 特点:边读边解析 基于事件(方法)驱动方式

try {
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
SAXParser saxParser=saxParserFactory.newSAXParser();
saxParser.parse(is,new DefaultHandler(){
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
//得到开始标签
currentTag = localName;
if ("User".equals(currentTag)){
//得到属性name的值
user = new User();
String uid=attributes.getValue(0);
user.setUid(uid);
}

}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
//设置currentTag清空
currentTag=null;
if ("User".equals(currentTag)){
listUser1.add(user);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
//获取标签文本值
if ("uname".equals(currentTag)){
String uname=new String(ch,start,length);
user.setUname(uname);
}else if("age".equals(currentTag)){
String age=new String(ch,start,length);
user.setAge(age);
}

}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}

@Override
public void startDocument() throws SAXException {
super.startDocument();
}
});
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}*/


第三种:Pull 解析xml(Android),这个是Android封装的

XmlPullParser pullParser=Xml.newPullParser();
pullParser.setInput(is,"UTF-8");
//获取标签类型
int type=pullParser.getEventType();
while (type!=pullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
//获取开始标签的名字
String startTagName=pullParser.getName();
user=new User();
if ("User".equals(startTagName)){
String uid=pullParser.getAttributeValue(0);
user.setUid(uid);
}else if("uname".equals(startTagName)){
String uname=pullParser.nextText();
user.setUname(uname);
}else if ("age".equals(startTagName)){
String age=pullParser.nextText();
user.setAge(age);
}
break;
case XmlPullParser.END_TAG:
//获取结束标签的名字
String endTagName=pullParser.getName();
if("User".equals(endTagName)){
listUser1.add(user);
}
break;
}
}
type=pullParser.next();

} catch (XmlPullParserException e) {
e.printStackTrace();
}


希望我的分析对大家能有所帮助!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android java xml 数据 json