【XML和Java】Java程序+DOM4J 对XML的解析以及输出
XML的解析
对xml文件进行操作,包括创建xml,对xml文件进行增删改查操作
常见的xml解析技术
-
DOM解析:由官方提供,基于xml树。耗资源多,适用于多次访问
-
SAX解析:由民间提供,基于事件。耗资源少,使用于大量数据
-
JDOM解析:由第三方提供,开源免费。比DOM解析快
-
DOM4J(DOM for Java):由第三方提供,是JDOM的升级版
DOM4J技术解析xml
- 在项目内导入 DOM4J 的依赖
不懂如何添加依赖的小伙伴们,可以看看 【IDEA项目配置】在项目里的xml文件内添加项目依赖 - 在项目下的src路径下准备好xml文件,以下是示例:
<!-- scores.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 声名内部DTD -->
<!DOCTYPE scores [
<!ELEMENT scores (student*) >
<!ELEMENT student (name, course, score) >
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>
<!ATTLIST student id CDATA #REQUIRED>
]>
<scores>
<student id="1">
<name>王同</name>
<course>java</course>
<score>89</score>
</student>
<student id="2">
<name>李佳</name>
<course>sql</course>
<score>58</score>
</student>
<student id="3">
<name>张三</name>
<course>fata</course>
<score>80</score>
</student>
</scores>
- 编写Java代码,将scores.xml中的数据读取出来
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.Iterator;
public class test1 {
public static void main(String[] args) throws DocumentException {
//1.创建SAXReader对象,用于读取xml文件
SAXReader reader = new SAXReader();
//2.读取xml文件,得到Document对象
Document document = reader.read(new File("src/scores.xml"));
//3.获取根元素
Element rootElement = document.getRootElement();
//4.迭代器获取根元素下所有子元素
Iterator<Element> elementIterator = rootElement.elementIterator();
while (elementIterator.hasNext()){
//取出迭代器中的元素
Element element = elementIterator.next();
//获取属性
Attribute id = element.attribute("id");
System.out.println(id.getName()+ "=" + id.getValue());
//获取子元素
Element name = element.element("name");
Element course = element.element("course");
Element score = element.element("score");
//打印
System.out.println(name.getName()+ "=" +name.getStringValue());
System.out.println(course.getName()+ "=" +course.getStringValue());
System.out.println(score.getName()+ "=" +score.getStringValue());
}
}
}
通过Java程序创建一个xml文件以及相关数据
- 在项目内导入 DOM4J 的依赖
不懂如何添加依赖的小伙伴们,可以看看 【IDEA项目配置】在项目里的xml文件内添加项目依赖 - Java代码示例一(输出无缩进等样式的xml文件)
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class test2 {
public static void main(String[] args) throws IOException {
//1.提供DocumentHelper生成一个Document对象
Document document = DocumentHelper.createDocument();
//2.添加并得到根元素
Element root = document.addElement("books");
//3.为根元素添加子元素
Element book = root.addElement("book");
//4.为book元素添加属性
book.addAttribute("id","b02");
//5.为book添加子元素
Element name = book.addElement("name");
Element author = book.addElement("author");
Element price = book.addElement("price");
//6.为子元素添加文本
name.addText("Java Tapping");
author.addText("you");
price.addText("100");
//7.将doc输出到xml文件即可
Writer writer = new FileWriter(new File("src/books.xml")); //输出文件路径
document.write(writer);
//8.关闭资源
writer.close();
}
}
- Java代码示例二(输出有样式好看的xml文件)
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class test2 {
public static void main(String[] args) throws IOException {
//1.提供DocumentHelper生成一个Document对象
Document document = DocumentHelper.createDocument();
//2.添加并得到根元素
Element root = document.addElement("books");
//3.为根元素添加子元素
Element book = root.addElement("book");
//4.为book元素添加属性
book.addAttribute("id","b02");
//5.为book添加子元素
Element name = book.addElement("name");
Element author = book.addElement("author");
Element price = book.addElement("price");
//6.为子元素添加文本
name.addText("Java Tapping");
author.addText("you");
price.addText("100");
//7.格式良好的输出
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileWriter(new File("src/books.xml")),format);
xmlWriter.write(document);
//8.关闭资源
xmlWriter.close();
}
}