DOM4j读取XML文件(SAXReader)
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
DOM4j讀取XML文件(SAXReader)
一、一個(gè)很好的SAXReader讀寫xml文件的例題;
總結(jié):
Document document=new SAXReader.reader(“xml文路徑/文件名xxx.xml”);//得到Document對(duì)象
Element root = document.getRootElement()//獲得根節(jié)點(diǎn)
Iterator iterator=root.elementIterator(); //從根節(jié)點(diǎn)遍歷子節(jié)點(diǎn)
Iterator iterator=Element.elementIterator(); //再從子節(jié)點(diǎn)在遍歷其子節(jié)點(diǎn)
對(duì)節(jié)點(diǎn)訪問其屬性用:Attribute leaderAttr =Element. attribute(“xxx”);
對(duì)節(jié)點(diǎn)訪問其某個(gè)屬性leaderAttr的名稱:leaderAttr.getName();
對(duì)節(jié)點(diǎn)訪問其某個(gè)屬性leaderAttr的值:leaderAttr.getValue()
對(duì)節(jié)點(diǎn)訪問其名稱:Element.getName();
對(duì)節(jié)點(diǎn)訪問其文本:Element. getText();
簡(jiǎn)單代碼為如下:
Document document=new SAXReader.reader(“xml文路徑/文件名xxx.xml”);
Element root = document.getRootElement();??
HashMap hm = new HashMap<String,String>();????
for ( Iterator iter = root.elementIterator(); iter.hasNext(); )?
{?? Element element = (Element) iter.next();?
??? Attribute ageAttr=element.attribute("age");
??????? String age = ageAttr.getValue();???
????? 。。。。。
for ( Iterator iterInner = element.elementIterator(); iterInner.hasNext(); ) {???
??? Element elementInner = (Element) iterInner.next();
????
//遍歷college節(jié)點(diǎn)開始
if(elementInner.getName().equals("college")){
/添加college的文本
hm.put(elementInner.getName()+ num, elementInner.getText());
//添加college的leader屬性
Attribute leaderAttr=elementInner.attribute("leader");
。。。。。如果leaderAttr不是空字符或者其值不為null。。。。。
hm.put(elementInner.getName() + "-"+leaderAttr.getName()+ num,
leaderAttr.getValue());
???? }
else{ //遍歷非college節(jié)點(diǎn)的其它節(jié)點(diǎn)???
???? hm.put(elementInner.getName()+ num, elementInner.getText());???
}??
?????
<?xml version="1.0" encoding="UTF-8"?>
<students>??
??? <student age="25"><!--如果沒有age屬性,默認(rèn)的為20-->??
??????? <name>崔衛(wèi)兵</name>??
??????? <college>PC學(xué)院</college>??
??????? <telephone>62354666</telephone>??
??????? <notes>男,1982年生,碩士,現(xiàn)就讀于北京郵電大學(xué)</notes>??
??? </student>??
??? <student>??
??????? <name>cwb</name>??
??????? <college leader="學(xué)院領(lǐng)導(dǎo)">PC學(xué)院</college><!--如果沒有l(wèi)eader屬性,默認(rèn)的為leader-->??
??????? <telephone>62358888</telephone>??
??????? <notes>男,1987年生,碩士,現(xiàn)就讀于中國農(nóng)業(yè)大學(xué)</notes>??
??? </student>??
??? <student age="45">??
??????? <name>xxxxx</name>??
??????? <college leader="">xxx學(xué)院</college>??
??????? <telephone>66666666</telephone>??
??????? <notes>注視中,注釋中</notes>??
??? </student>??
??? <student age="">??
??????? <name>lxx</name>??
??????? <college>yyyy學(xué)院</college>??
??????? <telephone>88888888</telephone>??
??????? <notes>注視中111,注釋中222</notes>??
??? </student>??
</students>??
Dom4jReadExmple.java
package test2;
import java.io.File;???
import java.util.HashMap;???
import java.util.Iterator;???
import org.dom4j.Attribute;???
import org.dom4j.Document;???
import org.dom4j.DocumentException;???
import org.dom4j.Element;???
import org.dom4j.io.SAXReader;???
public class Dom4jReadExmple {????
public void iterateWholeXML(String filename,HashMap<String,String> hm){???
SAXReader saxReader = new SAXReader();???
try {???
?? Document document = saxReader.read(new File(filename));???
?? Element root = document.getRootElement();???
//?? 用于記錄學(xué)生編號(hào)的變量???
?? int num=-1;???
?? //遍歷根結(jié)點(diǎn)(students)的所有孩子節(jié)點(diǎn)(肯定是student節(jié)點(diǎn))???
???????? for ( Iterator iter = root.elementIterator(); iter.hasNext(); ) {???
???????????? Element element = (Element) iter.next();???
???????????? num++;???
??? // 獲取person節(jié)點(diǎn)的age屬性的值???
???????????? Attribute ageAttr=element.attribute("age");???
??? if(ageAttr!=null){???
???? String age = ageAttr.getValue();???
???? if (age != null&&!age.equals("")) {???
????? hm.put(element.getName() + "-"+ageAttr.getName()+ num, age);???
???? } else {???
????? hm.put(element.getName() + "-" +ageAttr.getName()+ num, "20");???
???? }???
??? }else{???
???? hm.put(element.getName() + "-age"+ num, "20");???
??? }???
???????????? //遍歷student結(jié)點(diǎn)的所有孩子節(jié)點(diǎn)(即name,college,telphone,notes),并進(jìn)行處理???
???????????? for ( Iterator iterInner = element.elementIterator(); iterInner.hasNext(); ) {???
????????????? Element elementInner = (Element) iterInner.next();???
????????????? if(elementInner.getName().equals("college")){???
?????????????? hm.put(elementInner.getName()+ num, elementInner.getText());???
?????????????? //獲取college節(jié)點(diǎn)的leader屬性的值???
?????????????? Attribute leaderAttr=elementInner.attribute("leader");???
?????????????? if(leaderAttr!=null){???
?????? String leader = leaderAttr.getValue();???
?????? if (leader != null&&!leader.equals("")) {???
??????? hm.put(elementInner.getName() + "-"+leaderAttr.getName()+ num, leader);???
?????? } else {???
??????? hm.put(elementInner.getName() + "-" +leaderAttr.getName()+ num, "leader");???
?????? }???
?????????????? }else {???
?????? hm.put(elementInner.getName() + "-leader"+ num, "leader");???
????? }???
????????????? }else{???
?????????????? hm.put(elementInner.getName()+ num, elementInner.getText());???
????????????? }???
???????????? }???
???????? }???
??
} catch (DocumentException e) {???
?? // TODO Auto-generated catch block???
?? e.printStackTrace();???
}???
}???
}????
TestDom4jReadExmple.java
package dom4jExample.read;???
import java.util.HashMap;???
public class TestDom4jReadExmple {???
public static void main(String[] args) {???
???? try{???
?????? //獲取解析完后的解析信息???
?????? HashMap<String,String> hashMap;???
?????? Dom4jReadExmple drb=new Dom4jReadExmple();???
?????? //遍歷整個(gè)XML文件???
?????? hashMap = new HashMap<String,String>();???
?????? drb.iterateWholeXML("studentInfo.xml", hashMap);???
?????? System.out.println("姓名\t年齡\t學(xué)院\t學(xué)院領(lǐng)導(dǎo)\t電話\t\t備注");???
?????? for(int i=0;i<hashMap.size();i+=6){???
???????? int j=i/6;???
???????? System.out.print(hashMap.get("name"+j)+"\t");???
???????? System.out.print(hashMap.get("student-age"+j)+"\t");???
???????? System.out.print(hashMap.get("college"+j)+"\t");???
???????? System.out.print(hashMap.get("college-leader"+j)+"\t");???
???????? System.out.print(hashMap.get("telephone"+j)+"\t");???
???????? System.out.println(hashMap.get("notes"+j)+"\t");???
?????? }???
???? }catch(Exception ex){???
?????? ex.printStackTrace();???
???? }???
?? }???
}???
二、
一個(gè)讀寫操作的例子:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class testXml {
public static void main(String[] args) {
try {
testXml test = new testXml();
test.testWrite();
test.testRead();
} catch (Exception e) {
e.printStackTrace();
}
}
public void testRead() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new FileInputStream("src/output.xml"));
Element root = document.getRootElement();
for (Iterator iter = root.elementIterator(); iter.hasNext();) {
Element element = (Element) iter.next();
System.out.println(element.getText());
System.out.println(element.attributeValue("name"));
System.out.println(element.attributeValue("blog"));
}
}
public void testWrite() throws Exception{
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");
for(int i=0;i<10;i++){
Element element1 = root.addElement("user")
.addAttribute("name","Alex"+i)
.addAttribute("id", "id"+i)
.addText("我是信息");
}
XMLWriter writer = new XMLWriter(new FileOutputStream("src/output.xml"));
writer.write(document);
writer.close();
}
}
輸出的效果:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<user name="Alex0" id="id0">我是信息</user>
<user name="Alex1" id="id1">我是信息</user>
<user name="Alex2" id="id2">我是信息</user>
<user name="Alex3" id="id3">我是信息</user>
<user name="Alex4" id="id4">我是信息</user>
<user name="Alex5" id="id5">我是信息</user>
<user name="Alex6" id="id6">我是信息</user>
<user name="Alex7" id="id7">我是信息</user>
<user name="Alex8" id="id8">我是信息</user>
<user name="Alex9" id="id9">我是信息</user>
</root>
轉(zhuǎn)載于:https://my.oschina.net/004/blog/102504
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的DOM4j读取XML文件(SAXReader)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全球IPv6网络6月6日正式启动
- 下一篇: OSPF路由聚合实验(详细)