Dom4j简单应用

前言:Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM开发的。与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。


使用:Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。

使用Dom4j开发,需下载dom4j相应的jar文件。


l 具体应用:

a. DOM4j中,获得Document对象的方式有三种:


1.读取XML文件,获得document对象           

                   SAXReader reader = new SAXReader();
              Document   document = reader.read(new File("input.xml"));


2.解析XML形式的文本,得到document对象.

                   String text = "<members></members>";
              Document document = DocumentHelper.parseText(text);


3.主动创建document对象.

                  Document document = DocumentHelper.createDocument();
             //创建根节点

                  Element root = document.addElement("members");


b. Tip:节点对象

Element root = document.getRootElement();

c. 取得某个节点的子节点.

Element element=root.element(“书名");

d. 取得节点的文字

String element=node.getText();

e. 取得某节点下所有名为“member”的子节点,并进行遍历.

List nodes = rootElm.elements("member");

  for (Iterator it = nodes.iterator(); it.hasNext();) {
     Element elm = (Element) it.next();
    // do something
}


f. 对某节点下的所有子节点进行遍历.

for(Iterator it=root.elementIterator();it.hasNext();){
       Element element = (Element) it.next();
       // do something
    }


例如:

@Test

public void Test1() throws Exception {

// 创建读取器

SAXReader sr = new SAXReader();

Document doc = sr.read(new File("src\\student.xml"));

Element el = doc.getRootElement();

disPlayElement(el);

}


private void disPlayElement(Element el) {

disPlayAttribute(el);

for (Iterator<Element> it = el.elementIterator(); it.hasNext();) {

Element elem = it.next();

disPlayAttribute(elem);

if (elem.isTextOnly()) {

System.out.println(elem.getTextTrim());

} else {

disPlayElement(elem);

}


}


}


private void disPlayAttribute(Element el) {

for (Iterator<Attribute> it = el.attributeIterator(); it.hasNext();) {

Attribute att = it.next();

System.out.println(att.getValue());

}


}



g. 在某节点下添加子节点.

Element ageElm = newMemberElm.addElement("age");

h. 在某节点下添加子节点.

element.setText("29");

i. 删除某节点.
//childElm是待删除的节点,parentElm是其父节点

parentElm.remove(childElm);

j. 添加一个CDATA节点.
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());

例如:

修改
@Test

public void Test3() throws Exception {

SAXReader sr = new SAXReader();

Document doc = sr.read("src\\student.xml");

sr.setStripWhitespaceText(true);

Element students = doc.getRootElement();

Element studen = students.addElement("student");

Element name = studen.addElement("name");

name.setText("测试");

List<Element> list = students.elements();

Element students_2 = list.get(0);

Element name_2 = (Element) students_2.elements().get(0);

name_2.setText("测试2");

OutputFormat format = new OutputFormat("   ", true, "utf-8");

XMLWriter xw = new XMLWriter(new FileWriter("src\\student2.xml"),

format);

xw.write(doc);

xw.close();

}

删除

// 删除xml信息

@Test

public void Test4() throws Exception {

SAXReader sr=new SAXReader();

Document doc=sr.read(new File("src\\student.xml"));

Element studentRoot =doc.getRootElement();

Element student=studentRoot.element("student");

Element name=student.element("name");

//删除时用父节点删除子节点

student.remove(name);

OutputFormat format = new OutputFormat("   ", true, "utf-8");

XMLWriter xw = new XMLWriter(new FileWriter("src\\student4.xml"),

format);

xw.write(doc);

xw.close();

}


l Tip:将文档写入XML文件.

1.文档中全为英文,不设置编码,直接写入的形式.
  XMLWriter writer = new XMLWriter(new  FileWriter("output.xml"));
  writer.write(document);
  writer.close();


2.文档中含有中文,设置编码格式写入的形式.
OutputFormat format = OutputFormat.createPrettyPrint();
// 指定XML编码                  

     format.setEncoding("GBK");      
XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);
writer.write(document);
writer.close();

例如:

@Test

public void Test2() throws Exception {

Document doc = DocumentHelper.createDocument();

Element students = doc.addElement("Students");

Element student = students.addElement("student");

Element name = student.addElement("name");

name.addText("朱磊");

Element age = student.addElement("age");

age.addText("22");

Element sex = student.addElement("sex");

sex.addText("男");

Element email = student.addElement("email");

email.addText("[email protected]");

Element address = student.addElement("addRess");

address.addText("保定软件");

OutputFormat format = new OutputFormat("      ", true, "utf-8");

XMLWriter xw = new XMLWriter(new FileWriter("src\\student1.xml"),

format);

xw.write(doc);

xw.close();

}


l Dom4j在指定位置插入节点

1.得到插入位置的节点列表(list)

2.调用list.add(index,elemnent),由index决定element的插入位置。

Element元素可以通过DocumentHelper对象得到。示例代码:


Element aaa = DocumentHelper.createElement("aaa");

aaa.setText("aaa");


List list = root.element("书").elements();

list.add(1, aaa);


//更新document

例如:

@Test

public void Test3() throws Exception {

SAXReader sr = new SAXReader();

Document doc = sr.read("src\\student.xml");

sr.setStripWhitespaceText(true);

Element students = doc.getRootElement();

Element studen = students.addElement("student");

Element name = studen.addElement("name");

name.setText("测试");

List<Element> list = students.elements();

Element students_2 = list.get(0);

Element name_2 = (Element) students_2.elements().get(0);

name_2.setText("测试2");

OutputFormat format = new OutputFormat("   ", true, "utf-8");

XMLWriter xw = new XMLWriter(new FileWriter("src\\student2.xml"),

format);

xw.write(doc);

xw.close();

}

你可能感兴趣的:(Hibernate,xml,软件测试,F#,sun)