package com.xu.do4j;
import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
public class dom4j_01 {
/**
* 建立一个XML文档,文档名由输入属性决定
* @param filename 需建立的文件名
* @return 返回操作结果, 0表失败, 1表成功
*/
public boolean createXMLFile(String filename){
/** 返回操作结果, false表失败, true表成功 */
boolean returnValue = false;
/** 建立document对象*/
Document document = DocumentHelper.createDocument();
/** 建立XML文档的根books */
Element booksElement = document.addElement("books");
/** 加入一行注释 */
booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");
/** 加入第一个book节点*/
Element bookElement = booksElement.addElement("book");
/** 加入show属性内容 */
bookElement.addAttribute("show","yes");
/** 加入title节点 */
Element titleElement = bookElement.addElement("title");
/** 为title设置内容 */
titleElement.setText("Dom4j Tutorials");
/** 再添加一个book节点信息 */
bookElement = booksElement.addElement("book");
bookElement.addAttribute("show", "yes");
titleElement = bookElement.addElement("title");
titleElement.setText("Lucene Studing");
/** 再添加一个book节点信息 */
bookElement = booksElement.addElement("book");
bookElement.addAttribute("show", "no");
titleElement = bookElement.addElement("title");
titleElement.setText("Lucene in Action");
Element ownerElement = booksElement.addElement("owner");
ownerElement.setText("O'Reilly");
try{
File file = new File(filename);
if(null != file){
returnValue = writer(file,document);
}
}catch(Exception e){
e.printStackTrace();
}
return returnValue;
}
/**
*
* @param file
* @param document
* @return
* @throws Exception
*/
public boolean writer(File file , Document document) throws Exception{
boolean flag = false;
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileWriter(file), format);
xmlWriter.write(document);
xmlWriter.close();
flag = true;
return flag;
}
/**
*
* @param url
* @return
* @throws DocumentException
*/
public Document parse(String filename) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(filename);
return document;
}
public void reader(Document document) throws DocumentException {
Element root = document.getRootElement();
Iterator it = root.elementIterator();
while (it.hasNext()) {
Element element = (Element) it.next();
//未知属性名称情况下
Iterator attrIt = element.attributeIterator();
System.out.print("element:"+element.getName());
while (attrIt.hasNext()) {
Attribute a = (Attribute) attrIt.next();
System.out.print("-->attribute:"+a.getValue());
}
Iterator titleIt = element.elementIterator();
if(!titleIt.hasNext()){
System.out.print("-->text:"+element.getText());
}
while (titleIt.hasNext()){
Element titleElement = (Element) titleIt.next();
System.out.print("-->titleElement:"+titleElement.getName());
if(null != element.getText() && !"".equals(element.getText())){
System.out.println("-->text:"+titleElement.getText());
}
}
//已知属性名称情况下
// System.out.println("show: " + element.attributeValue("show"));
//未知元素名情况下
// Iterator eleIt = element.elementIterator();
// while (eleIt.hasNext()) {
// Element e = (Element) eleIt.next();
// System.out.println(e.getName() + ": " + e.getText());
// }
//已知元素名情况下
// System.out.println("title: " + element.elementText("title"));
}
}
public void readerReal(Document document) throws DocumentException {
Element root = document.getRootElement();
String owner = root.elementText("owner");
if(null != owner && !"".equals(owner)){
System.out.println(owner);
}
Iterator it = root.elementIterator();
while(it.hasNext()){
Element element = (Element) it.next();
String title = element.elementText("title");
if(null != title && !"".equals(title)){
System.out.println(title);
}
}
}
//@Test
public void testCreateXMLFile(){
String filename = "D:"+File.separator+"bookinfo.xml";
if(createXMLFile(filename)){
System.out.println("生成xml成功");
}else{
System.out.println("生成xml失败");
}
}
@Test
public void testReadXMLFile(){
String filename = "D:"+File.separator+"bookinfo.xml";
try {
Document document = parse(filename);
readerReal(document);
} catch (Exception e) {
e.printStackTrace();
}
}
}