java用Dom4j来解析XML


  首先,创建一个工程然后构建路径,点击添加jar包,然后找到jar包添加就行了。

  第一、

<?xml version="1.0" encoding="UTF-8"?>  
<students>  
    <student1 id="001">  
        <微信公众号>@残缺的孤独</微信公众号>  
        <学号>20140101</学号>  
        <地址>北京海淀区</地址>  
        <座右铭>要么强大,要么听话</座右铭>  
    </student1>  
    <student2 id="002">  
        <新浪微博>@残缺的孤独</新浪微博>  
        <学号>20140102</学号>  
        <地址>北京朝阳区</地址>  
        <座右铭>在哭泣中学会坚强</座右铭>  
    </student2></students> 

在工程文件下创造一个"123.xml"


写一个遍历XML的函数

private void listNodes(Element node) {
		//输出当前节点的名称
		System.out.println("当前节点的名称:" + node.getName());
		//创建一个node的属性的列表
		List<Attribute> list = node.attributes();
		for(Attribute attribute : list) {
			System.out.println("属性" + attribute.getName() + ":" +attribute.getValue());
		}
		//如果节点还有内容的话,输出内容的名字和内容<name>Text</name>
		if(!node.getTextTrim().equals("")) {
			System.out.println(node.getName() + ":" + node.getText());
		}
		//获得节点的元素的迭代器
		Iterator<Element> iterator = node.elementIterator();
		//如果有元素的话递归
		while(iterator.hasNext()) {
			Element e = iterator.next();
			listNodes(e);
		}
		
	}


用一个SAXReader的对象来获取一个Document的对象。进而通过document来获取根节点元素。然后遍历输出

public void test() throws DocumentException {
		//创建一个SAXReader的对象
		SAXReader reader = new SAXReader();
		File file = new File("123.xml");
		//创建一个Document的对象,从文件中读取数据
		Document document = reader.read(file);
		//获取XML的根节点
		Element root = document.getRootElement();
		//输出XML的的数据
		listNodes(root);
	}

添加属性<student id = 1>的id 就是属性

public void test2() throws DocumentException {
		//创建一个SAXReader的对象
		SAXReader reader = new SAXReader();
		File file = new File("123.xml");
		//创建一个Document的对象,从文件中读取数据
		Document document = reader.read(file);
		//获取XML的根节点
		Element root = document.getRootElement();
		System.out.println("---------添加节点前---------");
		Element student1element = root.element("student1");
		listNodes(student1element);
		Attribute idAttribute = student1element.attribute("id");
		student1element.remove(idAttribute);
		student1element.addAttribute("newId", "123");
		System.out.println("---------添加节点后---------");
		listNodes(student1element);
	}
attribute(String args)这个函数的是用来获取一个名字为"args"的属性对象,然后调用remove来删除这个属性。还可以通过addAttribute("name_attribute","value_attribute")来添加一个名字为"name_attribute",值为"value_attribute"的属性


public void test3() throws DocumentException {
		SAXReader reader = new SAXReader();
		File file = new File("123.xml");
		Document document = reader.read(file);
		Element root = document.getRootElement();
		System.out.println("-------添加节点前-------");
		Element student1element = root.element("student1");
		listNodes(student1element);
		Element phoneElement = student1element.addElement("phone");
		phoneElement.setText("18792665072");
		System.out.println("-------添加节点后--------");
		listNodes(student1element);
	}
addElement(String name)的作用是加一个名字为“phone”的元素,addElement可以返回一个Element的对象,调用Element的setText(String content)的方法来设置元素的内容。


public void test4() throws DocumentException, IOException {
		SAXReader reader = new SAXReader();
		File file = new File("123.xml");
		Document document = reader.read(file);
		Element root = document.getRootElement();
		System.out.println("--------添加节点前-------");
		Element student1Element = root.element("student1");
		listNodes(student1Element);
		Element phoneElement = student1Element.addElement("phone");
		phoneElement.setText("18792665072");
		System.out.println("-------添加节点后-------");
		listNodes(student1Element);	
		//将student1Element1写进文件里
		writerDocumentToNewFile(document);
		System.out.println("已经成功写入文件中");
		
	}
	
	
	private void writerDocumentToNewFile(Document document) throws IOException {
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");
		File file = new File("234.xml");
		FileOutputStream filewriter = new FileOutputStream(file);
		OutputStreamWriter out = new OutputStreamWriter(filewriter, "UTF-8"); 
		XMLWriter writer = new XMLWriter(out, format);
		writer.write(document);
		writer.flush();
		writer.close();
	}
可以用一个XMLWriter的对象来把一个XML写进文件中XMLWriter(out,format)来写。OutputFormat来创造一个对象。调用静态方法createPrettyPrint()方法来创建一个输出格式。然后调用format的setEncodin(String charset)来设置输出格式。并通过OutputSteamWriter对象来输出。但是当我使用BufferedReader的方法来输出的时候,会出现乱码,只能通过这个方法来输出。



 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值