androidstudioxml解析,浅谈AndroidStudio解析XML的三种⽅法⼀⼂概述
⽂件解析要求,json解析和xml解析,前⾯⽂章说过Json转实体类,这⾥就说说解析XML
内容:
Android Studio 解析XML常见的三种⽅式:DOM PULL SAX (实现XML转实体类并打印输出)
效果演⽰:
⼆⼂正⽂
SAX(Simple API for XML) 使⽤流式处理的⽅式,它并不记录所读内容的相关信息。它是⼀种以事件为驱动的XML API,解析速度快,占⽤内存少。使⽤回调函数来实现。 缺点是不能倒退。
DOM(Document Object Model) 是⼀种⽤于XML⽂档的对象模型,可⽤于直接访问XML⽂档的各个部分。它是⼀次性全部将内容加载在内存中,⽣成⼀个树状结构,它没有涉及回调和复杂的状态管理。 缺点是加载⼤⽂档时效率低下。
Pull内置于Android系统中。也是官⽅解析布局⽂件所使⽤的⽅式。Pull与SAX有点类似,都提供了类似的事件,如开始元素和结束元素。不同的是,SAX的事件驱动是回调相应⽅法,需要提供回调的⽅法,⽽后在SAX内部⾃动调⽤相应的⽅法。⽽Pull解析器并没有强制要求提供触发的⽅法。因为他触发的事件不是⼀个⽅法,⽽是⼀个数字。它使⽤⽅便,效率⾼。
SAX、DOM、Pull的⽐较:
1. 内存占⽤:SAX、Pull⽐DOM要好;
2. 编程⽅式:SAX采⽤事件驱动,在相应事件触发的时候,会调⽤⽤户编好的⽅法,也即每解析⼀类XML,就要编写⼀个新的适合该类XML的处理类。DOM是W3C的规范,Pull简洁。
3. 访问与修改:SAX采⽤流式解析,DOM随机访问。
4. 访问⽅式:SAX,Pull解析的⽅式是同步的,DOM逐字逐句
这⾥不做详细讲解,看注释,上代码
XML
李雷
30
韩梅梅
25
person.Java
public class Person {
Integer id;
String name;
Short age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) { this.name = name;
}
public Short getAge() {
return age;
}
sticky定位public void setAge(Short age) {
this.age = age;
c语言谭浩强第四版pdf百度云}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + ''' +
", age=" + age +
'}';
}
}
XMLtoEntityActivity
public class XMLtoEntityActivity extends AppCompatActivity { private TextView tv_show_entity;
private String string = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(lto_entity_activity);
tv_show_entity = (TextView) findViewById(R.id.tv_show_entity); }
public void startXML(View view){
// SAXService saxService = new SAXService();
// DOMService domService = new DOMService();
PULLService pullService = new PULLService();
try {
InputStream inputStream = getAssets().open("l");
next studio// List persons = Person(inputStream);
// List persons = Persons(inputStream);
虚拟机linux怎么打开命令行List persons = Persons(inputStream);
for (Person person : persons) {
Log.e("TAG",String());
string += String();
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
tv_show_entity.setText(string);
}
}
DOM⽅法
/**
* 采⽤DOM解析XML内容
*/
public class DOMService {
public List getPersons(InputStream inputStream) throws Exception {
List persons = new ArrayList<>();
//获取DOM解析器⼯⼚
DocumentBuilderFactory factory = wInstance(); //获DOM解析器
DocumentBuilder builder = wDocumentBuilder();
//将解析树放⼊内存,通过返回值Document来描述结果
Document document = builder.parse(inputStream);
//取得根元素
Element root = DocumentElement();
//取得所有person节点集合
NodeList personNodes = ElementsByTagName("person");
for (int i = 0; i < Length(); i++) {
Person person = new Person();
//取得person节点元素
Element personElement = (Element) personNodes.item(i);
//取得属性值并设置ID
person.setId(Integer.Attribute("id")));
//获取person的⼦节点
NodeList personChilds = ChildNodes();
for (int j = 0; j < Length(); j++) {
//判断当前节点是否是元素类型的节点
if (personChilds.item(j).getNodeType() == Node.ELEMENT_NODE) {
Element childElement = (Element) personChilds.item(j);
if ("name".NodeName())) {
//获取孙节点的值
person.FirstChild().getNodeValue());
} else if ("age".NodeName())) {
person.setAge(Short.FirstChild().getNodeValue())); }
}
}
persons.add(person);
}
return persons;
}shell命令删除文件夹
}
PULL⽅法
/**
* 采⽤PULL解析XML内容帅气撩人高冷动漫男壁纸
*/
public class PULLService {
public List getPersons(InputStream inputStream) throws Exception {
List persons = null;
Person person = null;
/
/得到PULL解析器
XmlPullParser parser = wPullParser();
parser.setInput(inputStream,"UTF-8");
//产⽣事件
int eventType = EventType();
//如果不是⽂档结束事件就循环推进
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT://开始⽂档事件
persons = new ArrayList<>();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论