java 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 = "\r\n"

+"   \r\n"

+"     127.0.0.1\r\n"

+"     21\r\n"

+"     cxl\r\n"

+"     longshine\r\n"

+"     \r\n"

+"     50\r\n"

+"     \r\n"

+"     10\r\n"

+"  \r\n"

+"\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());

}

9、修改或删除某个值或属性

/** ftp节点删除ftp-host节点 */

ftpElement.remove(hostElement);

/** ftp节点删除name属性 */

ftpElement.remove(nameAttribute);

/** 修改ftp-host的值 */

hostElement.setText("192.168.0.1");

/** 修改ftp节点name属性的值 */

nameAttribute.setValue("ChiFeng");

---------------------------------JoeCom 2006-11-11

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值