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<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添加子元素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<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
@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<Element> 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<Element> list = dom.selectNodes(xpath);
for(Element e:list){
System.out.println(e.getText());
}
}
Xpath_simples.pdf在我的資源中可以找到。