Java对XML文档进行解析(dom4j解析)

1.获取元素:

	@Test //获取第一个user节点
	public void readDemo() throws Exception{
		//获取DOM
		SAXReader sax = new SAXReader();
		Document dom = sax.read("./xml/user.xml");
		//获取根节点
		/**
		 * ELement中有三种方法获得元素:
		 * element(name)//查单
		 * elements(name)	//查全,返回一个list
		 * elementIterator()//迭代,返回一个Iterator
		 */
		
		Element root = dom.getRootElement();
		Element eUser = root.element("user");
		
		//获取属性
		String id1=eUser.attributeValue("id");
		String id2=eUser.attribute("id").getValue();
		System.out.println("id1:"+id1+" id2:"+id2);
		
		//获取子元素
		String name=eUser.element("name").getText();	//法一
		String age=eUser.elementText("age");			//法二
		System.out.println("name:"+name+" age:"+age);
	}
@Test //遍历用户,获取所有user的信息
	public void iteratorDemo() throws Exception{
		SAXReader sax=new SAXReader();
		Document dom=sax.read("./xml/user.xml");
		Element root=dom.getRootElement();
		
//		Iterator it = root.elementIterator();		//遍历所有儿子节点
		Iterator it = root.elementIterator("user");		//遍历所有儿子节点
		while(it.hasNext()){
			Element element=it.next();
			String id=element.attributeValue("id");
			String name=element.elementText("name");
			String age=element.elementText("age");
			System.out.println(id+","+name+","+age);
		}
	}
2.对文档进行持久化:

@Test //给文档添加一个aa元素--持久化
	public void addDemo() throws Exception{
		Document dom=new SAXReader().read("./xml/user.xml");
		
		Element root=dom.getRootElement();
		//给root添加子元素aa
		Element aa = root.addElement("aa");
		//给aa添加属性
		aa.addAttribute("id", "aa1001");
		//给aa添加子元素:name
		Element eA_Name = aa.addElement("name");
		eA_Name.setText("aaaaaa");
		//给aa添加子元素:age
		aa.addElement("age").setText("991");
		
		//持久化
		//1.dom.write(FileWrite())
//		Writer w=new FileWriter("./xml/user.xml");
//		dom.write(w);		//字符流必须刷缓存
//		w.close();
		
		//2.XMLWriter类中的writer(dom)
//		FileWriter fw=new FileWriter("./xml/user.xml");
//		XMLWriter w=new XMLWriter(fw);
//		w.write(dom);
//		w.close();
		
		//3.以指定字符编码写
		OutputFormat format=OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");
		//把格式加入到XMLWriter中
		XMLWriter w=new XMLWriter(new FileWriter("./xml/user.xml"),format);
		w.write(dom);
		w.close();
	}
3.删除元素:

@Test //删除根节点下的最后一个子元素
	public void delDemo() throws Exception{
		Document dom=new SAXReader().read("./xml/user.xml");
		
		Element root=dom.getRootElement();
		
		List list=root.elements();
		Element eLast=list.get(list.size()-1);
		eLast.getParent().remove(eLast);
		
		//持久化
		XMLWriter w=new XMLWriter(new FileWriter("./xml/user.xml"));
		w.write(dom);
		w.close();
	}
4.修改元素:

@Test //更改文档根节点下最后一个子元素的信息
	public void updateDemo() throws Exception{
		Document dom=new SAXReader().read("./xml/user.xml");
		Element root=dom.getRootElement();
		
		//先找到元素
		List list = root.elements();
		Element eLast=list.get(list.size()-1);
		//在对元素进行设置值
		//若属性或元素存在则修改,否则为添加
		eLast.addAttribute("id", "修改后的id");
		Element name = eLast.element("name");
		name.setText("修改后的name");
		
		
		//持久化
		XMLWriter w=new XMLWriter(new FileWriter("./xml/user.xml"));
		w.write(dom);
		w.close();
		
	}
5.添加元素:

//从零开始创建一个xml文档:aa.xml
	@Test
	public void createNewXMLDemo() throws Exception{
		Document dom=DocumentHelper.createDocument();
		Element root=dom.addElement("cities");
		Element e=root.addElement("city");
		e.addAttribute("id", "c1001");
		Element name = e.addElement("name");
		name.setText("邵阳");
		
		//持久化
		XMLWriter w=new XMLWriter(new FileWriter("./xml/aa.xml"));
		w.write(dom);
		w.close();
	}
6.xpath

////////////xpath技术:详细语法参考文档Xpath_simples.pdf
	/**		dom不支持,dom4j支持
	 * Xpath的基本套路:通过dom调用Node接口中的如下方法(参数采用xpath语法)进行节点选择
	 * 相当于正则表达式
	 * 1)selectNodes(xpathExpression)--List
	 * 2)selectObject(xpathExpression)--Object
	 * 3)selectSingleNode(xpathExpression)--Node
	 * 
	 * 注意一个细节:由于上面的几个方法是Node接口中的,因此普通的Element对象也能调用
	 * 		但是其含义跟dom调用一样的  , 也就是说 使用一个 x.selectNodes(xpathExpression) 跟dom.selectNodes(xpathExpression)是一样的
	 * 											都是查找整颗树下的元素
	 */
	@Test
	public void xpathDemo() throws Exception{
		Document dom=new SAXReader().read("./xml/user.xml");
		//获取所有的name元素
//		String xpath="//name";
//		String xpath="//user/name";//获取所有user下的name儿子元素  只能是一个/
//		String xpath="//user//name";//获取所有user的子孙后代的name元素 
		String xpath="/users/name";
		
		
		List list = dom.selectNodes(xpath);
		for(Element e:list){
			System.out.println(e.getText());
		}
	}
@Test
	public void xpathDemo2() throws Exception{
		Document dom=new SAXReader().read("./xml/user.xml");
		
//		String xpath="//user[@name][@pwd]";	//查找同时具有name和pwd属性的user节点
		String xpath="//user[@name='dragon'][@pwd='1234']";	//查找同时具有name为"dragon"和pwd""属性的user节点
		
		List list = dom.selectNodes(xpath);
		for(Element e:list){
			System.out.println(e.getText());
		}
	}
Xpath_simples.pdf在我的资源中可以找到。

你可能感兴趣的:(xml)