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); 当然也可以实现节点、属性、文本的修改、删除操作。
。