在java中使用dom4j解析xml(示例代码)

高洛峰
Release: 2017-01-11 11:52:57
original
1378 people have browsed it

虽然Java中已经有了Dom和Sax这两种标准解析方式

但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心

为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具

鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作

Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了

首先我们需要出创建一个xml文档,然后才能对其解析

xml文档:

 
 
    
      Harry Potter 
      J K. Rowling 
    
    
      Learning XML 
      Erik T. Ray 
    
Copy after login

示例一:用List列表的方式来解析xml

import java.io.File;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo {
 public static void main(String[] args) throws Exception {
  SAXReader reader = new SAXReader();
  File file = new File("books.xml");
  Document document = reader.read(file);
  Element root = document.getRootElement();
  List childElements = root.elements();
  for (Element child : childElements) {
   //未知属性名情况下
   /*List attributeList = child.attributes();
   for (Attribute attr : attributeList) {
    System.out.println(attr.getName() + ": " + attr.getValue());
   }*/

   //已知属性名情况下
   System.out.println("id: " + child.attributeValue("id"));

   //未知子元素名情况下
   /*List elementList = child.elements();
   for (Element ele : elementList) {
    System.out.println(ele.getName() + ": " + ele.getText());
   }
   System.out.println();*/

   //已知子元素名的情况下
   System.out.println("title" + child.elementText("title"));
   System.out.println("author" + child.elementText("author"));
   //这行是为了格式化美观而存在
   System.out.println();
  }
 }
}
Copy after login

示例二:使用Iterator迭代器的方式来解析xml

import java.io.File;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo {
 public static void main(String[] args) throws Exception {
  SAXReader reader = new SAXReader();
  Document document = reader.read(new File("books.xml"));
  Element root = document.getRootElement();

  Iterator it = root.elementIterator();
  while (it.hasNext()) {
   Element element = (Element) it.next();

   //未知属性名称情况下
   /*Iterator attrIt = element.attributeIterator();
   while (attrIt.hasNext()) {
    Attribute a  = (Attribute) attrIt.next();
    System.out.println(a.getValue());
   }*/

   //已知属性名称情况下
   System.out.println("id: " + element.attributeValue("id"));

   //未知元素名情况下
   /*Iterator eleIt = element.elementIterator();
   while (eleIt.hasNext()) {
    Element e = (Element) eleIt.next();
    System.out.println(e.getName() + ": " + e.getText());
   }
   System.out.println();*/

   //已知元素名情况下
   System.out.println("title: " + element.elementText("title"));
   System.out.println("author: " + element.elementText("author"));
   System.out.println();
  }
 }
}
Copy after login

运行结果:

2016110316252934.png

示例三:创建xml文档并输出到文件

import java.io.File;
import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class Demo {
 public static void main(String[] args) throws Exception {
  Document doc = DocumentHelper.createDocument();
  //增加根节点
  Element books = doc.addElement("books");
  //增加子元素
  Element book1 = books.addElement("book");
  Element title1 = book1.addElement("title");
  Element author1 = book1.addElement("author");

  Element book2 = books.addElement("book");
  Element title2 = book2.addElement("title");
  Element author2 = book2.addElement("author");

  //为子节点添加属性
  book1.addAttribute("id", "001");
  //为元素添加内容
  title1.setText("Harry Potter");
  author1.setText("J K. Rowling");

  book2.addAttribute("id", "002");
  title2.setText("Learning XML");
  author2.setText("Erik T. Ray");

  //实例化输出格式对象
  OutputFormat format = OutputFormat.createPrettyPrint();
  //设置输出编码
  format.setEncoding("UTF-8");
  //创建需要写入的File对象
  File file = new File("D:" + File.separator + "books.xml");
  //生成XMLWriter对象,构造函数中的参数为需要输出的文件流和格式
  XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
  //开始写入,write方法中包含上面创建的Document对象
  writer.write(doc);
 }
}
Copy after login

运行结果:

在java中使用dom4j解析xml(示例代码)

更多在java中使用dom4j解析xml(示例代码)相关文章请关注PHP中文网!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact [email protected]
Latest issues
Popular Tutorials
More>
Latest downloads
More>
web effects
Website source code
Website materials
Front end template
About us Disclaimer Sitemap
PHP Chinese website:Public welfare online PHP training,Help PHP learners grow quickly!