dom4j操作xml的练习

来源:互联网 发布:天下三捏脸数据 编辑:程序博客网 时间:2024/04/27 07:59

做了一个java操作xml的练习:下面把代码上传到博客上,以备学习工作之用!

通常java操作xml,可以通过的解析方式有:DOM、SAX、JDOM、DOM4J。个人觉得DOM4J相对功能要强一些。所以这里就只针对DOM4J做了练习。

首先是一个xml:city.xml,放在了D盘根目录。

<?xml version = '1.0'?><citys><city id='010'><cityname>北京</cityname><cityarea>华北</cityarea><population>2114.8万</population></city><city id='021'><cityname>上海</cityname><cityarea>华东</cityarea><population>2,500万</population></city><city id='020'><cityname>广州</cityname><cityarea>华南</cityarea><population>1292.68万人</population></city><city id='028'><cityname>成都</cityname><cityarea>华西</cityarea><population>1417万</population></city></citys>

下面是个java类,写了三种方法,一种是:IO读取这个xml文件。一种是:把这个xml内容放在字符串中去读取xml串。还有一种是写一个xml文件:

package com.zyujie.init.util;import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.Reader;import java.util.Iterator;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class TestXML {public static void main(String[] args) {String xmlStr = "<?xml version = '1.0'?><citys><city id='010'><cityname>北京</cityname><cityarea>华北</cityarea><population>2114.8万</population></city><city id='021'><cityname>上海</cityname><cityarea>华东</cityarea><population>2,500万</population></city><city id='020'><cityname>广州</cityname><cityarea>华南</cityarea><population>1292.68万人</population></city><city id='028'><cityname>成都</cityname><cityarea>华西</cityarea><population>1417万</population></city></citys>";TestXML t = new TestXML();t.parserCityXml("D:\\city.xml");t.createCityXml("D:\\newcity.xml");//t.parserCityStr(xmlStr);}/* * 直接读取XML串 */public void parserCityStr(String xmlStr) {try {Document document = DocumentHelper.parseText(xmlStr);// 获得文档的根元素Element rootElement = document.getRootElement();// 遍历一级节点 使用迭代的方法for (Iterator i = rootElement.elementIterator(); i.hasNext();) {// 返回下一个迭代元素Element city = (Element) i.next();// 调用 Element元素.attributeValue 方法就可以获得节点的属性System.out.println("cityid:" + city.attributeValue("id"));// 遍历一级节点下的所有子节点for (Iterator j = city.elementIterator(); j.hasNext();) {// 返回下一个迭代元素Element node = (Element) j.next();System.out.println(node.getName() + ":" + node.getText());}}} catch (Exception e) {e.printStackTrace();}}/* * 读取XML文件 */public void parserCityXml(String fileName) {// 文件对象File input = new File(fileName);// SAXReadr对象SAXReader saxr = new SAXReader();try {// 用IO来读,可设置编码,防止因为文件编码而不能读取FileInputStream in = new FileInputStream(new File(fileName));Reader read = new InputStreamReader(in, "gbk");Document document = saxr.read(read);// 调用SAXReader的read方法将文件对象传入进去即可获得文档对象// Document document = saxr.read(input);// 获得文档的根元素Element rootElement = document.getRootElement();// 遍历一级节点 使用迭代的方法for (Iterator i = rootElement.elementIterator(); i.hasNext();) {// 返回下一个迭代元素Element city = (Element) i.next();// 调用 Element元素.attributeValue 方法就可以获得节点的属性System.out.println("cityid:" + city.attributeValue("id"));// 遍历一级节点下的所有子节点for (Iterator j = city.elementIterator(); j.hasNext();) {// 返回下一个迭代元素Element node = (Element) j.next();System.out.println(node.getName() + ":" + node.getText());}}} catch (Exception e) {e.printStackTrace();}}/* * 写一个XML文件 */public void createCityXml(String fileName) {// 通过DocumentHelper 这个文档帮助类来创建文档对象Document document = DocumentHelper.createDocument();// 创建元素对象 这个用于充当根元素 第一次addElement的就是根元素Element citys = document.addElement("citys");// 创建一个子元素对象Element city = citys.addElement("city");try {city.addAttribute("id", "022");// 给子元素设置值Element tjname = city.addElement("cityname");tjname.setText(new String("天津".getBytes("UTF-8")));Element tjarea = city.addElement("cityarea");tjarea.setText(new String("华北".getBytes("UTF-8")));Element tjpopulation = city.addElement("population");tjpopulation.setText(new String("1472.21万人".getBytes("UTF-8")));city.addAttribute("id", "023");// 给子元素设置值Element cqname = city.addElement("cityname");cqname.setText(new String("重庆".getBytes("UTF-8")));Element cqarea = city.addElement("cityarea");cqarea.setText(new String("华西".getBytes("UTF-8")));Element cqpopulation = city.addElement("population");cqpopulation.setText(new String("2,970万人".getBytes("UTF-8")));// 创建写入字符流对象 fileName是路径名称// Writer fileWriter = new FileWriter(fileName);OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");XMLWriter xmlWriter = new XMLWriter(new FileWriter(fileName), format);// 创建dom4j的写入器 将字符流对象放进去// XMLWriter xmlWriter = new XMLWriter(fileWriter);// 调用写入器的write方法就可以创建xml文件成功xmlWriter.write(document);// 关闭写入器xmlWriter.close();} catch (IOException e) {System.out.println(e.getMessage());}}}

代码都在上面了,注意一下xml文件格式和字符格式。

执行查询结果:

cityid:010cityname:北京cityarea:华北population:2114.8万cityid:021cityname:上海cityarea:华东population:2,500万cityid:020cityname:广州cityarea:华南population:1292.68万人cityid:028cityname:成都cityarea:华西population:1417万

这应该是DOM4J最基本的操作了!还有一些应用可以参考API来实现。

0 0