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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值