首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Java操作XML资料 dom4j 篇

2012-12-19 
Java操作XML文件 dom4j 篇在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互。今

Java操作XML文件 dom4j 篇

在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互。
今天就来讲一下Java 中使用dom4j来操作XML文件。

我们需要引入的包:

//文件包
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
//工具包
import java.util.Iterator;
import java.util.List;
//dom4j包
import org.dom4j.Attribute;
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;

1、将XML文件的内容转化为String

???/**
???? * doc2String
???? * 将xml文档内容转为String
???? * @return 字符串
???? * @param document
???? */
???public static String doc2String(Document document)
??? {
??????String s = "";
??????try
?????? {
???????????//使用输出流来进行转化
??????????? ByteArrayOutputStream out = new ByteArrayOutputStream();
???????????//使用GB2312编码
??????????? OutputFormat format = new OutputFormat("?? ", true, "GB2312");
??????????? XMLWriter writer = new XMLWriter(out, format);
??????????? writer.write(document);
??????????? s = out.toString("GB2312");
?????? }catch(Exception ex)
?????? {????????????
??????????? ex.printStackTrace();
?????? }??????
??????return s;
??? }

2、将符合XML格式的String 转化为XML Document

???/**
???? * string2Document
???? * 将字符串转为Document
???? * @return
???? * @param s xml格式的字符串
???? */
???public static Document string2Document(String s)
??? {
?????? Document doc = null;
??????try
?????? {
??????????? doc = DocumentHelper.parseText(s);
?????? }catch(Exception ex)
?????? {????????????
??????????? ex.printStackTrace();
?????? }
??????return doc;
??? }

3、将Document对象保存为一个xml文件到本地

???/**
???? * doc2XmlFile
???? * 将Document对象保存为一个xml文件到本地
???? * @return true:保存成功?? flase:失败
???? * @param filename 保存的文件名
???? * @param document 需要保存的document对象
???? */
???public static boolean doc2XmlFile(Document document,String filename)
??? {
??????boolean flag = true;
??????try
?????? {
????????????/* 将document中的内容写入文件中 */
????????????//默认为UTF-8格式,指定为"GB2312"
???????????? OutputFormat format = OutputFormat.createPrettyPrint();
???????????? format.setEncoding("GB2312");
???????????? XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)),format);
???????????? writer.write(document);
???????????? writer.close();????????????
???????? }catch(Exception ex)
???????? {
???????????? flag = false;
???????????? ex.printStackTrace();
???????? }
????????return flag;??????
??? }

4、将xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败

???/**
???? * string2XmlFile
???? * 将xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败
???? * @return true:保存成功?? flase:失败
???? * @param filename 保存的文件名
???? * @param str 需要保存的字符串
???? */
???public static boolean string2XmlFile(String str,String filename)
??? {
??????boolean flag = true;
??????try
?????? {
????????? Document doc =?? DocumentHelper.parseText(str);???????
????????? flag = doc2XmlFile(doc,filename);
?????? }catch (Exception ex)
?????? {
????????? flag = false;
????????? ex.printStackTrace();
?????? }
??????return flag;
??? }

5、载入一个xml文档

???/**
???? * load
???? * 载入一个xml文档
???? * @return 成功返回Document对象,失败返回null
???? * @param uri 文件路径
???? */
???public static Document load(String filename)
??? {
?????? Document document = null;
??????try
?????? {
?????????? SAXReader saxReader = new SAXReader();
?????????? document = saxReader.read(new File(filename));
?????? }
??????catch (Exception ex){
?????????? ex.printStackTrace();
?????? }??
??????return document;
??? }

6、演示String保存为xml文件

???/**
???? * xmlWriteDemoByString
???? * 演示String保存为xml文件
???? */
???public void xmlWriteDemoByString()
??? {
??????String s = "";
??????/** xml格式标题 "<?xml version='1.0' encoding='GB2312'?>" 可以不用写*/
?????? s = "<config>\r\n"
????????? +"??? <ftp name='DongDian'>\r\n"
????????? +"????? <ftp-host>127.0.0.1</ftp-host>\r\n"
????????? +"????? <ftp-port>21</ftp-port>\r\n"
????????? +"????? <ftp-user>cxl</ftp-user>\r\n"
????????? +"????? <ftp-pwd>longshine</ftp-pwd>\r\n"
????????? +"????? <!-- ftp最多尝试连接次数 -->\r\n"
????????? +"????? <ftp-try>50</ftp-try>\r\n"
????????? +"????? <!-- ftp尝试连接延迟时间 -->\r\n"
????????? +"????? <ftp-delay>10</ftp-delay>\r\n"
????????? +"?? </ftp>\r\n"
????????? +"</config>\r\n";
??????//将文件生成到classes文件夹所在的目录里???
?????? string2XmlFile(s,"xmlWriteDemoByString.xml");???
??????//将文件生成到classes文件夹里???
?????? string2XmlFile(s,"classes/xmlWriteDemoByString.xml");??
??? }

7、演示手动创建一个Document,并保存为XML文件

???/**
???? * 演示手动创建一个Document,并保存为XML文件
???? */
???public void xmlWriteDemoByDocument()
??? {
????????/** 建立document对象 */
???????? Document document = DocumentHelper.createDocument();
????????/** 建立config根节点 */
???????? Element configElement = document.addElement("config");
????????/** 建立ftp节点 */
???????? configElement.addComment("东电ftp配置");
???????? Element ftpElement = configElement.addElement("ftp");
???????? ftpElement.addAttribute("name","DongDian");
????????/** ftp 属性配置 */
???????? Element hostElement = ftpElement.addElement("ftp-host");
???????? hostElement.setText("127.0.0.1");
???????? (ftpElement.addElement("ftp-port")).setText("21");
???????? (ftpElement.addElement("ftp-user")).setText("cxl");
???????? (ftpElement.addElement("ftp-pwd")).setText("longshine");
???????? ftpElement.addComment("ftp最多尝试连接次数");
???????? (ftpElement.addElement("ftp-try")).setText("50");
???????? ftpElement.addComment("ftp尝试连接延迟时间");
???????? (ftpElement.addElement("ftp-delay")).setText("10");????
????????/** 保存Document */
???????? doc2XmlFile(document,"classes/xmlWriteDemoByDocument.xml");
??? }

8、演示读取文件的具体某个节点的值

???/**
???? *?? 演示读取文件的具体某个节点的值
???? */
???public static void xmlReadDemo()
??? {
?????? Document doc = load("classes/xmlWriteDemoByDocument.xml");
??????//Element root = doc.getRootElement();
??????/** 先用xpath查找所有ftp节点 并输出它的name属性值*/
?????? List list = doc.selectNodes("/config/ftp" );
?????? Iterator it = list.iterator();
??????while(it.hasNext())
?????? {???
?????????? Element ftpElement = (Element)it.next();
?????????? System.out.println("ftp_name="+ftpElement.attribute("name").getValue());
?????? }
??????/** 直接用属性path取得name值 */
?????? list = doc.selectNodes("/config/ftp/@name" );
?????? it = list.iterator();
??????while(it.hasNext())
?????? {???
?????????? Attribute attribute = (Attribute)it.next();
?????????? System.out.println("@name="+attribute.getValue());
?????? }
??????/** 直接取得DongDian ftp的 ftp-host 的值 */
?????? list = doc.selectNodes("/config/ftp/ftp-host" );
?????? it = list.iterator();
?????? Element hostElement=(Element)it.next();
?????? System.out.println("DongDian's ftp_host="+hostElement.getText());
??? }

热点排行