这两天在一直写数据接口,涉及到数据xml文件的生成与解析,在此,简单地记录和总结一下。
其实,生成与解析xml文件主要还是运用java中的I/O文件的知识点。
现在大多数的人写xml文件的生成和解析都使用dom4j,它确实比传统的w3c的写法要简单方便的多。就像jQuery相比于js的优点显而易见一般。
dom4j 简介:
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常优秀的Java XML API,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。Sun的JAXM也在用dom4j, Hibernate用它来读写配置文件。
dom4j创建文档元素的写法要简单的多,如:
Document document = DocumentHelper.createDocument(); //创建文档
Element employees=document.addElement("employees");
Element employee=employees.addElement("employee");
Element name= employee.addElement("name"); //添加子节点
name.setText("ddvip"); //添加Text值;例:<a>abc</a>
name.setAttributeValue("sa", "sa"); //添加属性;例:<a item="item"></a>
dom4j的写法更加地灵活,更符合我们的思维逻辑。它创建完一个元素后,如果想为其添加子元素的话,直接在元素中添加即可,逻辑关系更加清晰、直接。避免了传统写法添加多个子标签的繁琐。
dom4j中文件的写出也比较简单。大题分三步:
Writer fileWriter=new FileWriter(fileName);
XMLWriter xmlWriter=new XMLWriter(fileWriter);
xmlWriter.write(document); //写入文件中
xmlWriter.close();
1,新建一个普通的文件流,文件路径作为参数。
2,新建一个xml文件流,普通文件流作为参数。
3,调用xml文件流的write方法将上面创建的文档写出,文档作为参数。
4,关闭文件流。
下面再来了解一下xml文档的解析写法;
1,根据文件路径生成文件
File inputXml=new File(fileName);
2,新建dom4j自己的saxReader 对象
SAXReader saxReader = new SAXReader();
3,调用saxReader对象的read方法读取文件
Document document = saxReader.read(inputXml); //把文件读入到文档
4,获取文档根元素
Element employees=document.getRootElement(); //获取文档根节点
5,迭代获取根元素下的子元素
Iterator<Element> oneLevelElementItor = messageElement.elementIterator();
6,处理多层标签嵌套
while(oneLevelElementItor.hasNext()){ Element e1 = oneLevelElementItor.next(); System.out.println("Message子元素:"+e1.getName()); //获取User元素下的子元素 Iterator<Element> twoLevelElementItor = e1.elementIterator(); while(twoLevelElementItor.hasNext()) { Element e2 = twoLevelElementItor.next(); System.out.println("User子元素:"+e2.getName()); userAttrMap.put(e2.getName(), e2.getText()); //获取Address下的子元素 if("Address".equals(e2.getName())) { Iterator<Element> threeLevelElementItor = e2.elementIterator(); while(threeLevelElementItor.hasNext()) { Element e3 = threeLevelElementItor.next(); System.out.println("Address子元素:"+e3.getName()); addressAttrMap.put(e3.getName(), e3.getText()); } } } }
7,获取根元素下子元素信息
Element childElement=employees.element("name");
childElement.getName();
childElement.getText();
childElement.getAttributeCount();
childElement.getAttributeValue();
当然也有对应的set方法
根元素和子元素都是元素,所以它们的操作方式基本相同。
原文:http://www.cnblogs.com/duanduan/p/4612180.html