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

来源:互联网 发布:access数据库查询条件 编辑:程序博客网 时间:2024/05/22 08:23

1.获取元素:

@Test //获取第一个user节点public void readDemo() throws Exception{//获取DOMSAXReader 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<Element> it = root.elementIterator();//遍历所有儿子节点Iterator<Element> 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添加子元素aaElement aa = root.addElement("aa");//给aa添加属性aa.addAttribute("id", "aa1001");//给aa添加子元素:nameElement eA_Name = aa.addElement("name");eA_Name.setText("aaaaaa");//给aa添加子元素:ageaa.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<Element> 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<Element> 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@Testpublic 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)是一样的 * 都是查找整颗树下的元素 */@Testpublic 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<Element> list = dom.selectNodes(xpath);for(Element e:list){System.out.println(e.getText());}}
@Testpublic 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<Element> list = dom.selectNodes(xpath);for(Element e:list){System.out.println(e.getText());}}
Xpath_simples.pdf在我的资源中可以找到。

原创粉丝点击