【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...就可以。


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

<A>

<a>

<i>1</i>

<ii>2</ii>

...

</a>

<a>

<i>3</i>

<ii>4</ii>

...

</a>

...

</A>

的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<Map> readStringXmlOut(String xml) {
		List<Map> mList = new ArrayList<Map>();
		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>结点,无视两个a结点之间存在着多少的结点

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


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

<A>

i-> <a>

ii-> <i>1</i>

<ii>2</ii>

...

</a>

<a>

<i>3</i>

<ii>4</ii>

...

</a>

...

</A>

三、对于Map的处理

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

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

四、对于List的处理

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

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

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

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

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




你可能感兴趣的:(【Java】使用Java对Xml的解析,并把它的所有二级结点放到MAP中,再把所有的MAP放到list之中)