java中有四种分别解析xml文件。分别是,DOM,SAX,DOM4J,JDOM四种。学习其中一种即可。其余三种解析思想差不了多少。
JDOM的主要使用方法:
(1)使用JDOM首先要指定使用什么解析器。如:
(2)得到Document,我们以后要进行的所有操作都是对这个Document操作的:
(3)得到根元素:
在JDOM中所有的节点(DOM中的概念)都是一个org.jdom.Element类,当然他的子节点也是一个org.jdom.Element类。
(4)得到元素(节点)的集合:
这表示得到“books”元素的所在名称为“book”的元素,并把这些元素都放到一个List集合中
(5)轮循List集合
还有一种轮循方法是:
(6)取得元素的属性:
(7)取得元素的子元素(为最低层元素)的值:
(8)改变元素(为最低层元素)的值:
(9)保存Document的修改到XML文件中:
outputter.output(doc,new FileOutputStream(xmlpath));
JDOM可以被用来解析现有的XML文档,并且十分方便。大致过程如下:
(1)用简单无变元构造函数构造一个org.jdom.input.SAXBuilder对象:
SAXBuilder sb = new SAXBuilder();
(2)用建立器的build()方法从Reader,InputStream,URL,File或包含系统ID的字
符串建立Document对象:
Document myDocument = sb.build(/some/directory/myFile.xml);
(3)如果读取文档遇到问题,则抛出IOException;如果建立文档遇到问题,则抛出
JDOMException。
(4)如没有出现问题,则用Document类、Element类和其他JDOM类的方法在文档
中导航。
实例
一 读取XML中的value值
test.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<entry name="VestVersion" value="12.15.40" />
<entry name="GUVersion" value="12.15.20" />
<entry name="Installzip" value="D:\a\b\conf" />
</Data>
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
public class ReadXML {
public static String read(String path) {
try {
// 创建一个SAXBuilder对象
SAXBuilder saxBuilder = new SAXBuilder();
Document doc = saxBuilder.build(path);
Element root = doc.getRootElement();
// 获取根元素下面的所有子元素(Data)
List<Element> dataList = root.getChildren("entry");
// 子根元素(Data)
Element childrenRoot = null;
List<Element> propertyList = null;
// 遍历根元素的子元素集合(即遍历Data元素)
for (int i = 0; i < dataList.size(); i++) {
Element element = dataList.get(i);
System.out.println(element.getAttributeValue("value")); //
}
return null;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
测试类
import java.io.File;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
String path = System.getProperty("user.dir") + File.separator + "data" + File.separator + "test.xml";
ReadXML.read(path);
}
}
输出结果:
12.15.40
12.15.20
D:\a\b\conf
二 写入XML的值
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.XMLOutputter;
public class WriteXML {
public static void write(String path, String name, String value) {
// TODO 自动生成方法存根
Element rootEle = new Element("Data");
Element provinceEle = new Element("entry");
provinceEle.setAttribute("name", name);
provinceEle.setAttribute("value", value);
rootEle.addContent(provinceEle);
Document doc = new Document(rootEle);
XMLOutputter out = new XMLOutputter();
try {
out.output(doc, new FileOutputStream(path));
} catch (FileNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
测试类
import java.io.File;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
String path = System.getProperty("user.dir") + File.separator + "data" + File.separator + "test.xml";
//ReadXML.read(path);
WriteXML.write(path, "version", "V8.10.10.00");
}
}
运行后生成的XML文档
<?xml version="1.0" encoding="UTF-8"?>
<Data><entry name="version" value="V8.10.10.00" /></Data>
三 追加写入xml文档
public static void write(String path, String value) {
try {
SAXBuilder saxBuilder = new SAXBuilder();
Document doc = saxBuilder.build(path);
Element rootEle = doc.getRootElement();
// TODO 自动生成方法存根
Element provinceEle = new Element("property");
provinceEle.setAttribute("value", value);
rootEle.addContent("\n");
rootEle.addContent(" ");
rootEle.addContent(provinceEle);
rootEle.addContent("\n");
XMLOutputter out = new XMLOutputter();
out.output(doc, new FileOutputStream(path));
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
}
}