在开发JavaWeb项目中通常是利用XML配置文件来提高应用程序的访问效率,而在配置XML的同时,更多时候是对XML进行解析。
一、解析XML配置文件有两种机制:
DOM和SAX的机制:
DOM是将整个XML文件读到内容,形成一个倒状的树形结构。
SAX是一个一个的将XML文件中的元素加载的内存,不会形成一个倒状的树形结构。
常用dom4j的api: 主要使用到SAXReader类
SAXReader:表示DOM4J解析器
saxReader.read():加载需要解析的xml文件,返回document对象代表整个xml文件
document.getRootElement():取得根元素
element.getName():取得元素名称
rootElement.elements():取得该元素下的子元素的集合
element.element("车牌"):导航到"车牌"元素
element.getText():获取得某个元素的文本内容
element.elementText("产地"):导航到"产地"元素并获取该元素的文本内容
e.element("车牌").attributeValue("出产时间"):导航到"车牌"元素并获取该元素的“出产时间”属性的值
element.addElement("单价").setText("15");创建新元素并设置该元素的文本内容
二、在解析dom4j在XML配置文件的过程也需要使用到xpath技术
xpath技术:
在xml文件中快速定义符合xpath条件/路径的唯一/所有的元素
document.selectNodes(xpath);[取得所有的]
document.selectSingleNode(xpath);[取得单个的]
以下是dom4j解析XML文件的curd操作代码:
package cn.test.java.dom4j; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; 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 XMLcurd { //创建document对象 private Document getDocument() throws DocumentException { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File("src/cn/test/java/dom4j/test.xml")); return document; } //将document写入到指定的XML private void writerToXML(Document document) throws UnsupportedEncodingException, FileNotFoundException, IOException { //方法一:写入xml文件中包含有中文时 //设置输出格式 OutputFormat outputFormat = OutputFormat.createPrettyPrint(); //设置输出编码方式 outputFormat.setEncoding("UTF-8"); //将内存中的字节流转换为字符流 Writer writer = new OutputStreamWriter(new FileOutputStream("src/cn/test/java/dom4j/test.xml"),"UTF-8"); //构造XMLWriter用于写入XML文件 XMLWriter xmlWriter = new XMLWriter(writer,outputFormat); xmlWriter.write(document); xmlWriter.close(); } //XML的增加操作 @Test public void Create() throws Exception{ Document document = this.getDocument(); Element rootElement = document.getRootElement(); Element firstElement = (Element) rootElement.elements().get(0); firstElement.addElement("单价").setText("15");//在内存中(字节存储) writerToXML(document); } //XML的修改操作 @Test public void upDate() throws Exception{ Document document = this.getDocument(); Element rootElement = document.getRootElement(); Element secondElement = (Element) rootElement.elements().get(1); secondElement.element("产地").setText("深圳"); writerToXML(document); } //XML的删除操作 @Test public void delete() throws Exception{ Document document = this.getDocument(); Element rootElement = document.getRootElement(); List<Element> elementList = rootElement.elements(); for(Element e:elementList){ Element bandElement = e.element("车牌"); e.remove(bandElement); } writerToXML(document); } }