首页 > 学院 > 开发设计 > 正文

dom4j操作xml文件

2019-11-06 09:33:42
字体:
来源:转载
供稿:网友

在pom 中引入:

<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>

(一)新增一个xml文件 本地没有xml文件,创建一个新的xml文件:

PRivate static final String ELEMENT_ROOT="account-persist"; private static final String ELEMENT_ACCOUNTS="accounts"; private static final String ELEMENT_ACCOUNT="account"; private static final String ELEMENT_ACCOUNT_ID="id"; private static final String ELEMENT_ACCOUNT_NAME="name"; private static final String ELEMENT_ACCOUNT_EMAIL="email"; private static final String ELEMENT_ACCOUNT_PASSWord="password"; private static final String ELEMENT_ACCOUNT_ACTIVATED=""; private String file="F://learnTest//mvnbook//persist-data.xml"; private SAXReader reader=new SAXReader(); private void readDocument(){ File dateFile=new File(file); if(!dateFile.exists()){ dateFile.getParentFile().mkdirs(); //创建xml文件,元素是嵌套关系 Document doc= DocumentFactory.getInstance().createDocument(); Element rootFirstEle=doc.addElement(ELEMENT_ROOT); Element secEle=rootFirstEle.addElement(ELEMENT_ACCOUNTS); Element thEle=secEle.addElement(ELEMENT_ACCOUNT); Element sub_Ele_1=thEle.addElement(ELEMENT_ACCOUNT_ID); sub_Ele_1.addAttribute("color","red"); sub_Ele_1.setText("1"); Element sub_Ele_2=thEle.addElement(ELEMENT_ACCOUNT_NAME); sub_Ele_2.setText("test"); Element sub_Ele_3=thEle.addElement(ELEMENT_ACCOUNT_EMAIL); sub_Ele_3.setText("test@163.com"); Element sub_Ele_4=thEle.addElement(ELEMENT_ACCOUNT_PASSWORD); sub_Ele_4.setText("123456"); writeDocument(doc); }

创建一个文件输出流,将xml写入到指定的文件中:

private void writeDocument(Document doc){ Writer out=null; try{ out=new OutputStreamWriter(new FileOutputStream(file),"utf-8"); XMLWriter writer=new XMLWriter(out, OutputFormat.createPrettyPrint()); writer.write(doc); }catch (Exception e){ e.printStackTrace(); }finally { try{ if(out!=null){ out.close(); } }catch (Exception e){ e.printStackTrace(); } } }

添加的xml文件的结果形式是:

<?xml version="1.0" encoding="UTF-8"?><account-persist> <accounts> <account> <id color="red">1</id> <name>test</name> <email>test@163.com</email> <password>123456</password> </account> </accounts></account-persist>

(二)读取xml文件里的内容 方法一:

//读取xml内容 //这种方式需要熟悉xml文件的结构 public void readDoc(){ SAXReader reader=new SAXReader(); try{ Document doc=reader.read(new File(file)); //获取根节点account-persist的子元素accounts Element rootEle=doc.getRootElement().element(ELEMENT_ACCOUNTS); //再获取子元素accounts下的子元素account Element accountEle=rootEle.element(ELEMENT_ACCOUNT); //找出该节点下的所有元素 List<Element> elements=accountEle.elements(); //遍历所有元素 for(Element element:elements){ System.out.println("节点名称:"+element.getName()+" "+"节点的值:"+element.getText()); } }catch(Exception e){ e.printStackTrace(); } }

运行的结果:

节点名称:id 节点的值:1节点名称:name 节点的值:test节点名称:email 节点的值:test@163.com节点名称:password 节点的值:123456

(二)迭代和递归遍历xml内容

//在不知道xml文件结构的情况下,使用迭代和递归可以遍历出所有的元素和值 public void iterElement(){ SAXReader reader=new SAXReader(); try{ Document doc=reader.read(new File(file)); Element ele=doc.getRootElement(); //调用递归方法 allNodes(ele); }catch(Exception e){ e.printStackTrace(); } } public void allNodes(Element ele){ //获取节点的属性 List<Attribute> att=ele.attributes(); //迭代当前节点下的所有子元素 Iterator<Element> iteEle=ele.elementIterator(); if(iteEle.hasNext()){ Element element=iteEle.next(); //找出所有子节点 List<Element> elements=element.elements(); for(Element subEle:elements){ System.out.println("节点名字:"+subEle.getName()+" "+"节点值:"+subEle.getText()); allNodes(element); } } }

运行的结果:

节点名字:account 节点值:节点名字:id 节点值:1节点名字:name 节点值:test节点名字:email 节点值:test@163.com节点名字:password 节点值:123456

(三)修改元素的值

List<Element> elements=element.elements(); for(Element subEle:elements){ System.out.println("节点名字:"+subEle.getName()+" "+"节点值:"+subEle.getText()); //修改元素的值 if (subEle.getName().equals(ELEMENT_ACCOUNT_NAME)) { System.out.println("修改前name的值"+subEle.getName()+":"+subEle.getText()); subEle.setText("newName"); System.out.println("修改后nam的值"+subEle.getName()+":"+subEle.getText()); } allNodes(element); }

修改后的结果:

修改前name的值name:test修改后nam的值name:newName

修改后记得写会到文件中。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表