dom4j解析、修改、生成xml文件

项目中用到XML的地方非常普遍,XML也不是一种新的技术。但经常遇到朋友们问如何操作XML文件。所以写一个小例子,代码很乱。写出来和大家一起交流学习

1、生成XML

public void createApplicationConfigXML(){
//建立document对象
try {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");//添加文档根
root.addComment("这个一个注释");//加入一行注释
Element request = root.addElement("request"); //添加root的子节点
request.addAttribute("type", "cat");
request.addAttribute("flow", "tong");
request.addAttribute("time", "2009");
Element pro = request.addElement("pro");
pro.addAttribute("type", "att");
pro.addAttribute("name", "附件");
pro.addText("测试哈子");

Element cd = request.addElement("pro");
cd.addAttribute("type", "cd");
cd.addAttribute("name", "特殊字符过滤");
cd.addCDATA("特殊字符");

//输出全部原始数据,在编译器中显示
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");//根据需要设置编码
XMLWriter writer = new XMLWriter(System.out, format);
document.normalize();
writer.write(document);
writer.close();
// 输出全部原始数据,并用它生成新的我们需要的XML文件
XMLWriter writer2 = new XMLWriter(new FileWriter(new File(
"test.xml")), format);
writer2.write(document); //输出到文件
writer2.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

-----------------------------------------------------------------
下面是解析和修改XML
XML文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<root>
<request type="Pending" flowType="GENERAL" flowName="报销流程"
docId="185647" flowId="16409" nodeName="报销人确认" wikId="58288"
sendId="1210040" userId="1210040" createDate="2009-12-03"
title="费用报销 " flowCreaterId="1210040" nodeType="1"
bosTime="2009-12-03 09:36:15">
<pro type="att"></pro>
<pro type="textarea" name="OP_bxryj" title="处理意见" need="true"></pro>
</request>
</root>

修改

public String getApplcationConfigFromXMLTest(){
String value = "";
try {
SAXReader sax = new SAXReader();
Document xmlDoc = sax.read(new File(this.UBSSDIC_PATH));
Element root = xmlDoc.getRootElement();//根节点
Iterator it = root.elementIterator();
while(it.hasNext()){
Element ele = (Element)it.next();
Attribute attribute = ele.attribute("type");
if(attribute.getStringValue().equals("Pending")){
attribute.setValue("sendread2");//修改属性节点的值
}

Attribute flowType = ele.attribute("flowType");
flowType.detach();//删除某个属性

ele.addAttribute("type", "Pending");//添加一个属性节点
}
Element new_cdata = root.addElement("new_cdata");//添加一个元素
new_cdata.addCDATA("tst&ree");

Element new_ele = root.addElement("new_ele");//添加一个元素
new_ele.addText("33434343");

Element obj = (Element)root.selectObject("//pro[@type='att']");//根据XPath查找元素
obj.setText("测试dddddd");//修改元素的值 即text节点
//输出全部原始数据,在编译器中显示
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(System.out, format);
writer.write(xmlDoc);
writer.close();
// 输出全部原始数据,并用它生成新的我们需要的XML文件
XMLWriter writer2 = new XMLWriter(new FileWriter(new File(
"test.xml")), format);
writer2.write(xmlDoc); //输出到文件
writer2.close();
} catch (DocumentException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
return value ;
}

解析

public void parseApplicationConfigXML(){
try {
SAXReader sax = new SAXReader();
Document xmlDoc = sax.read(new File("E:\\20090316HPS\\Dom4jTest\\t.xml"));
Element root = xmlDoc.getRootElement();//根节点
Iterator it = root.elementIterator("request");
while(it.hasNext()){
Element request = (Element)it.next();
System.out.println(request.getName());
System.out.println(request.attributeValue("type"));
System.out.println(request.attributeValue("flow"));
System.out.println(request.attributeValue("time"));

}
System.out.println("-------------------------------------------");
List list = root.selectNodes("//pro");
for(int i = 0; i < list.size(); i++){
Element pro = (Element)list.get(i);
System.out.println(pro.getName());
System.out.println(pro.attributeValue("type"));
System.out.println(pro.attributeValue("name"));
System.out.println(pro.getText());
System.out.println("+++++++++++++++++++++++++++++++++");
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值