java xml map_【Java】使用Java对Xml的解析,并把它的所有二级结点放到MAP中,再把所有的MAP放到list之中 | 学步园...

在Java中要对Xml进行解析如果要使用Dom4j方法的话,存入MAP的话,必须先引入包dom4j-1.6.1.jar,jaxen-1.1.1.jar。在编程的时候,记得把这些包引入的Java工程的根目录下面,同时在程序同引入这些包。Eclipse可以右键相应的工程,选择JAVA Build Path->Add External JARs...就可以。

一、目的:是把一个类似于

1

2

...

3

4

...

...

的XML文档,先拆分成{i=1,ii=2} 与{i=3,ii=4}……的MAP,再合并成[{i=1,ii=2},{i=3,ii=4},...}的List

实质上,MAP与LIST都类似于数组,一系列的变量的集合。只是MAP与LIST可存放的元素与功能都比数组,这种数据结构,强大得多,它们都可以看作一种可以任意遍历的线性表。

二、对于XML的处理

首先,必须把XML通过缓冲区的数据流读入至一个字符串变量之中,然后再进行处理。不管XML是来自网络还是文件,甚至是标准的输入输出都按Java的数据流进行处理,没有任何的区别。

然后,对记录了XML的字符串进行处理:

public static List readStringXmlOut(String xml) {

List mList = new ArrayList();

Document doc = null;

try {

// 将字符串转为XML

doc = DocumentHelper.parseText(xml);

// 获取根节点

Element root = doc.getRootElement();

// 拿到根节点的名称

// System.out.println("根节点:" + root.getName());

Iterator i = root.elementIterator("a");

while (i.hasNext()) {

Map map = new HashMap();

Element e = (Element) i.next();

for (Iterator ii = e.elementIterator(); ii.hasNext();) {

Element ee = (Element) ii.next();

// 如果迭代器(游标)遇到content标签则需要进行处理

map.put(ee.getName(), ee.getStringValue());

}

mList.add(map);

}

} catch (DocumentException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

return mList;

}

1.首先,解析XML要求程序猿必须处理相应的异常,所有的处理XML代码必须被try

2.扔过来的字符串必须放在一个Document类型的变量doc进行处理,通过DocumentHelper.parseText(String)方法,把字符串擦写成Document类型

3.然后使用doc中的getRootElement()方法获取根节点。

4.结点元素都是Element类型,结点元素的迭代器,或者叫游标,也就是类似于指针的东西都是Iterator类型

5.通过强制类型转换,把Iterator类型强行转换成Element类型就是求出迭代器所指的元素

6.Iterator类型下面有next()方法可以把这个指针下移

7.Iterator类型下面有hasNext()方法,返回一个布尔值,可以判断指针下面有没有东西

Iterator i = root.elementIterator("a");意思是迭代器i如果向下拉,是直接拉到下一个结点,无视两个a结点之间存在着多少的结点

Iterator ii = e.elementIterator();意思是迭代器ii如果向下拉,则只是仅仅向下移一个结点,不指定ii寻找的方向。

8.上面代码的意思是,创造两个迭代器(游标),来处理这个由Xml转换成的Document类型的变量doc,然后不停地往下读,读到读完为止,ii的for循环镶嵌在i的while循环里面,ii循环完毕,i则向下拉到下一个结点

i->

ii->

1

2

...

3

4

...

...

三、对于Map的处理

要把XML文档,先拆分成{i=1,ii=2} 与{i=3,ii=4}……的Map,则用到结点元素Element类型下的getName()与getStringValue()方法,map.put(ee.getName(), ee.getStringValue());的意思,是把当前元素的结点名与结点值压到Map当中。例如1,则i是结点名,1是结点值。

通过Map.get("结点名")能把相应的结点值取出来。结点名,结点值都是String类型。

四、对于List的处理

两个迭代器ii与i遍历完,则同时生产完一张完整的Map。

通过mList.add(map);能把这张Map压倒mList中。

程序首部List mList = new ArrayList();代表这个list只存MAP。

List的操作相当简单。通过add()、remove()、clear()方法能很好地处理一切。

List这种类型,不需要额外的包,是java.util.*包的基本类型之一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值