public class Dom4jDemo {
@Test
public void hello() throws Exception{
SAXReader reader = new SAXReader();
Document dom = reader.read("./xml/users.xml");
Element eRoot = dom.getRootElement();
String name = eRoot.getName();
System.out.println(name);
}//需求:读取第一个<user>中的信息
@Test
public void demo1() throws Exception{
Document dom = new SAXReader().read( new File("./xml/users.xml"));
Element root = dom.getRootElement();
Element eUser = root.element("user"); //获取root下的第一个<user>子节点
String id = eUser.attributeValue("id");
String name = eUser.element("name").getText();//法1
String name2 = eUser.elementText("name");//法2--功能与上一行等价
String age = eUser.elementText("age");
System.out.println(id+","+name+","+name2+","+age);
}
//查,需求:遍历出文档中的所有<user>的信息
@Test
public void queryAll() throws Exception{
Document dom = new SAXReader().read("./xml/users.xml");
Element root = dom.getRootElement();
List<Element> list = root.elements();//获取root下的所有子节点 且封装到一个java.util.List中
for(Element e: list){
String id = e.attributeValue("id");
String name = e.elementText("name");
String age = e.elementText("age");
System.out.println(id+","+name+","+age);
}
System.out.println("-----------------");
Iterator<Element> it = root.elementIterator();//获取root下的所有子节点 且封装到一个迭代器中
while(it.hasNext()){
Element e = it.next();
String id = e.attributeValue("id");
String name = e.elementText("name");
String age = e.elementText("age");
System.out.println(id+","+name+","+age);
}
}
//增,需求:给xml文档添加一个<stu>元素
@Test
public void addElement() throws Exception{
Document dom = new SAXReader().read("./xml/users.xml");
Element root = dom.getRootElement();
//添加并封装一个<stu>子节点
Element eStu = root.addElement("stu");
eStu.addAttribute("id", "S002");
Element eName = eStu.addElement("name");
eName.addText("李同学");//添加文本内容,法1
Element eAge = eStu.addElement("age");
eAge.setText("22");//添加文本内容,法2---原来没有内容,因此添加和设置效果是一样的
///////序列化///////
//法1: 普通方式
XMLWriter w = new XMLWriter( new PrintWriter("./xml/users.xml"));
w.write(dom);
w.close();
//法2: 利用OutputFormat类进行格式化输出,如采用指定的编码
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter w2 = new XMLWriter(new FileOutputStream("./xml/users2.xml"), format);
w2.write(dom);
w2.close();
}
//删,需求:删除root下的最后一个子元素
//改,需求:修改root下的最后一个子元素
@Test
public void delAndUpdateElement() throws Exception{
Document dom = new SAXReader().read("./xml/users.xml");
Element root = dom.getRootElement();
//找到最后一个元素
List<Element> list = root.elements();//所有子元素
Element lastE = list.get( list.size()-1 );
//////////////////////////////////
//删除最后一个元素---找父亲删自己
//lastE.getParent().remove(lastE);
//修改最后一个元素
lastE.addAttribute("id", "S007");
lastE.element("name").setText("OKOK");
lastE.element("age").setText("111");
/////////////////////////////////
//序列化
XMLWriter w = new XMLWriter(new FileWriter("./xml/users.xml"));
w.write(dom);
w.close();
}
//从零开始创建一个新的xml文档
@Test
public void createNewXML() throws Exception{
Document dom = DocumentHelper.createDocument();
Element root = dom.addElement("cities");
Element eCity = root.addElement("city");
eCity.addAttribute("id", "C001");
eCity.addElement("name").setText("益阳");
eCity.addElement("addr").setText("湖南");
//序列化
XMLWriter w = new XMLWriter(new FileWriter("./xml/citys.xml"));
w.write(dom);
w.close();
}