没有合适的资源?快使用搜索试试~ 我知道了~
android解析XML文件.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 167 浏览量
2022-07-05
01:23:20
上传
评论
收藏 310KB DOC 举报
温馨提示
试读
14页
android解析XML文件
资源推荐
资源详情
资源评论
在 androd 手机中处理 xml 数据时很常见的事情,通常在不同平台传输数据的时候,
我们就可能使用 xml,xml 是与平台无关的特性,被广泛运用于数据通信中,那么在
android 中如何解析 xml 文件数据呢?
通常有三种方式:DOM,SAX,PULL
在这一节中我们使用 DOM 方式来处理。
DOM 方式解析 xml 是先把 xml 文档都读到内存中,然后再用 DOM API 来访问树形结构,
并获取数据的,但是这样一来,如果 xml 文件很大呢?手机 CPU 处理能力当然不能与 PC
机器比,因此在处理效率方面就相对差了,当然这是对于其他方式处理 xml 文档而言。
解析 xml 文档,当然必须有 xml 文档文件啦,我自己胡乱弄了一个 river,放在 assets
目录.如下:
<?xml version="1.0" encoding="utf-8"?>
<rivers>
<river name="灵渠" length="605">
<introduction>
灵渠在广西壮族自治区兴安县境内,是世界上最古老的运河之一,有着“世
界古代水利建筑明珠”的美誉。灵渠古称秦凿渠、零渠、陡河、兴安运河,于公
元前 214 年凿成通航,距今已 2217 年,仍然发挥着功用。
</introduction>
<imageurl>
http://imgsrc.baidu.com/baike/pic/item/389aa8fdb7b83
22e08244d3c.jpg
</imageurl>
</river>
<river name="胶莱运河" length="200">
<introduction>
胶莱运河南起黄海灵山海口,北抵渤海三山岛,流经现胶南、胶州、平度、
高密、昌邑和莱州等,全长 200 公里,流域面积达 5400 平方公里,南北贯穿
山东半岛,沟通黄渤两海。胶莱运河自平度姚家村东的分水岭南北分流。南流由
麻湾口入胶州湾,为南胶莱河,长 30 公里。北流由海仓口入莱州湾,为北胶莱
河,长 100 余公里。
</introduction>
<imageurl>
http://imgsrc.baidu.com/baike/pic/item/389aa8fdb7b83
22e08244d3c.jpg
</imageurl>
</river>
<river name="苏北灌溉总渠" length="168">
<introduction>
位于淮河下游江苏省北部,西起洪泽湖边的高良涧,流经洪泽,青浦、淮
安,阜宁、射阳,滨海等六县(区),东至扁担港口入海的大型人工河道。全长 168k
m。
</introduction>
<imageurl>
http://imgsrc.baidu.com/baike/pic/item/389aa8fdb7b83
22e08244d3c.jpg
</imageurl>
</river>
</rivers>
那么如何处理呢?
具体思路是:
*首先利用 DocumentBuilderFactory 创建一个 DocumentBuilderFactory 实例
*然后利用 DocumentBuilderFactory 创建 DocumentBuilder
*然后加载 XML 文档(Document),
*然后获取文档的根结点(Element),
*然后获取根结点中所有子节点的列表(NodeList),
*然后使用再获取子节点列表中的需要读取的结点。
当然我们观察节点,我需要用一个 River 对象来保存数据,抽象出 River 类
public class River implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public String getIntroduction() {
return introduction;
}
public void setIntroduction(String introduction) {
this.introduction = introduction;
}
public String getImageurl() {
return imageurl;
}
public void setImageurl(String imageurl) {
this.imageurl = imageurl;
}
private int length;
private String introduction;
private String imageurl;
}
下面我们就开始读取 xml 文档对象,并添加进 List 中:代码如下:
我们这里是使用 assets 中的 river.xml 文件,那么就需要读取这个 xml 文件,返回输入流。
读取方法为:
inputStream=this.context.getResources().getAssets().open(fileName); 参数是
xml 文件路径,当然默认的是 assets 目录为根目录。
然后可以用 DocumentBuilder 对象的 parse 方法解析输入流,并返回 document 对象,
然后再遍历 doument 对象的节点属性。
//获取全部河流数据
/**
* 参数 fileName:为 xml 文档路径
*/
public List<River> getRiversFromXml(String fileName){
List<River> rivers=new ArrayList<River>();
DocumentBuilderFactory factory=null;
DocumentBuilder builder=null;
Document document=null;
InputStream inputStream=null;
//首先找到 xml 文件
factory=DocumentBuilderFactory.newInstance();
try {
//找到 xml,并加载文档
builder=factory.newDocumentBuilder();
inputStream=this.context.getResources().getAsse
ts().open(fileName);
document=builder.parse(inputStream);
//找到根 Element
Element root=document.getDocumentElement();
NodeList nodes=root.getElementsByTagName(RIVER);
//遍历根节点所有子节点,rivers 下所有 river
River river=null;
for(int i=0;i<nodes.getLength();i++){
river=new River();
//获取 river 元素节点
Element riverElement=(Element)(nodes.ite
m(i));
//获取 river 中 name 属性值
river.setName(riverElement.getAttribute(
NAME));
river.setLength(Integer.parseInt(riverEl
剩余13页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功