Dom4j简单应用|操作xml文件方法



Dom4j简单应用|操作xml文件方法。Dom4j简单应用

读取一个XML文件?

/**

* 从指定目录读取XML文件

* @param fileName

* @return

* @throws MalformedURLException

* @throws DocumentException

*/

public Document read(String fileName) throws MalformedURLException, DocumentException {

SAXReader reader = new SAXReader();

Document document = reader.read(new File(fileName));

return document;

}

注意:SAXReader的read方法是重载的,可以从InputStream, File, Url等多种不同的源来读取。返回的Document对象就带表了整个XML。

取得XML文件的根节点?

/**

* 获取根节点

* @param doc

* @return

*/

public Element getRootElement(Document doc){

return doc.getRootElement();

}

遍历XML文件中的节点?

在Dom4j中遍历XML节点有三种方式,以第一种方式应用最为普遍:

· 枚举方式(迭代器方式Iterator);

· 递归方式;

· Visitor方式。

枚举方式?

/**

* 遍历节点 * @throws Exception

*/

public void for_node() throws Exception

{

// 创建XMLParser2对象

XMLParser2 xmlParser = new XMLParser2();

Document doc = xmlParser.read(“admin.xml”);

Element root = xmlParser.getRootElement(doc);

// 遍历所有子节点(这里的”所有”子节点只是相对于根节点而言)

for (Iterator i = root.elementIterator(); i.hasNext(); ) {

Element element = (Element) i.next();

System.out.println(element.getName());

}

}

Visitor方式?

DOM4J对Visitor的支持可以大大缩减代码量,并且清楚易懂。只需要自定一个类实现Visitor接口即可。如下:

public class MyVisitor extends VisitorSupport {

public static void main(String[] args) throws Exception{

// 创建XMLParser2对象

XMLParser2 xmlParser = new XMLParser2();

Document doc = xmlParser.read(“admin.xml”);

Element root = xmlParser.getRootElement(doc);

new MyVisitor().visit(root);

}

/**

* 访问指定元素,Visitor接口提供多种Visit()的重载

*/

public void visit(Element element){

System.out.println(element.getName());

}


/**

* 访问执行属性

*/

public void visit(Attribute attr){

System.out.println(attr.getName());

}

}

注意:Visitor接口提供多种Visit()的重载,根据XML不同的对象,将采用不同的方式来访问。Visitor是自动遍历所有子节点的。

XPath支持?

/**

* 选择单个节点

* @throws Exception

*/

public void selectSingleNode() throws Exception

{

// 创建XMLParser2对象

XMLParser2 xmlParser = new XMLParser2();

Document doc = xmlParser.read(“admin.xml”);

// “//”表示选择love节点,如果是love节点嵌套在最里面,可以以这样的方式访问://root/moive/love。当然,下面直接访问也是可以的

Node node = doc.selectSingleNode(“//love”);

// @可以访问节点对应的属性

String name = node.valueOf(“@name”);

System.out.println(name);

}

/**

* 选择多个节点,返回数组对象

* @return

* @throws Exception

*/

@SuppressWarnings(“unchecked”)

public Object[] getNodes() throws Exception

{

SAXReader reader = new SAXReader();

Document document = reader.read(new File(“admin.xml”));

// 找到指定的节点

List list = document.selectNodes(“//name”);

// List list = document.selectNodes(“//module/name”); 该种方式也可以

Object[] obj = list.toArray();

for (int i=0; i

{

Element el = (Element)list.get(i);

System.out.println(el.getText());

}

return obj;

}

注意:Xpath中的”/”和”//”可以找到相应的节点,”@”可以定位到相应的节点的属性。例如://books/book/@show

添加节点、属性、文本?

Element rootElement = document.getRootElement() ;

Element e2 = rootElement.addElement("loving");

e2.addAttribute("type", "doc");

Element e3 = e2.addElement("name");

e3.addText("蒂凡尼的早餐");

在最后应该操作写入XML文件,代码如下:

XMLWriter writer = new XMLWriter(new FileWriter("admin.xml"));

writer.write(document);

writer.close();

如果想让XML文件便于查看,应该格式化XML文件:

OutputFormat format = OutputFormat.createPrettyPrint();

writer = new XMLWriter(System.out, format);

writer.write(document);

当然也可以实现节点、属性、文本的修改、删除操作。