在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修改后記得寫會到文件中。
新聞熱點
疑難解答