首先自己创建一个xml文件:domtest.xml
<?xml version="1.0" encoding="utf-8"?>
<classes>
<group name="一年级" num="10">
<person name="小明" age="7">
<chinese>
语文80
</chinese>
<english>
英语89
</english>
</person>
<person name="小强" age="8">
<chinese>
语文90
</chinese>
<english>
英语99
</english>
</person>
</group>
<group name="二年级" num="20">
<person name="小文" age="8">
<chinese>
语文85
</chinese>
<english>
英语95
</english>
</person>
<person name="小中" age="9">
<chinese>
语文80
</chinese>
<english>
英语90
</english>
</person>
</group>
</classes>
解析出来的结果显示如下图:
下面来分析源代码:
/**
* 用dom方式 解析xml 文件
* @param filename
*/
private string domxmlparse(string filename) {
string str="";
// xml文档创建工厂
documentbuilderfactory docfactory = documentbuilderfactory
.newinstance();
// xml文档创建实例
documentbuilder docbuilder;
// xml文档
document doc = null;
inputstream instream = null;
try {
docbuilder = docfactory.newdocumentbuilder();
// 从assets文件夹下获取文件 转换成输入流
instream = this.getresources().getassets().open(filename);
doc = docbuilder.parse(instream);
// 获取xml跟元素
element rootele = doc.getdocumentelement();
// 二级父元素的list列表
nodelist groupnode = rootele.getelementsbytagname("group");
// nodelist childnode = rootele.getelementsbytagname("person");
// 遍历classe下所有的group
for (int i = 0; i < groupnode.getlength(); i++) {
element groupele = (element) groupnode.item(i);
string groupname = groupele.getattribute("name");
string num = groupele.getattribute("num");
str =str+"name ="+groupname+" num = "+num+"\n";
log.e("xml", "name = " + groupname + " num = " + num);
// nodelist personnode = groupnode.item(i).getchildnodes();
nodelist personnode = groupele.getelementsbytagname("person");
// 遍历group下的所有person
for (int j = 0; j < personnode.getlength(); j++) {
element personele = (element) personnode.item(j);
string name = personele.getattribute("name");
string age = personele.getattribute("age");
str =str+"personname ="+name+" personage = "+age+"\n";
log.e("xml", "name = " + name + " age = " + age);
element chineseele = (element) personele
.getelementsbytagname("chinese").item(0);
element englistele = (element) personele
.getelementsbytagname("english").item(0);
string chinese = chineseele.getfirstchild().getnodevalue();
string english = englistele.getfirstchild().getnodevalue();
str =str+"chinese = "+chinese+" english = "+english+"\n";
log.e("xml", "chinese = " + chinese + " english = "
+ english);
}
}
} catch (parserconfigurationexception e1) {
e1.printstacktrace();
} catch (ioexception e) {
e.printstacktrace();
} catch (saxexception e) {
e.printstacktrace();
}
return str;
}
为 xml 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 dom 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、cpu)。
以上就是android dom 解析xml方式 的内容。