2008年4月21日 Edited By DingDangXiaoMa
JDOM的目的是成為
Java特定文檔模型,它簡化與XML的交互并且比使用DOM實現更快
example:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
public class MyJDOM {
public MyJDOM() {
}
public static void main(String[] args) {
MyJDOM myJDOM = new MyJDOM();
myJDOM.parserXMLFile("http://localhost/example/xml/SutInfo.xml"); //這是網絡上的資料,也可以定義為本地資料,采用相對路徑的方式。
}
/**
* 解析文檔
*
* @param fileURI
*/
private void parserXMLFile(String fileURI) {
try {
// 獲得org.jdom.input.SAXBuilder的一個實例,用來獲得XML文檔。
// 參數false表示不進行驗證。
// 參數中沒有指定使用什么解析器,因此使用默認的解析器。
SAXBuilder builder = new SAXBuilder(false);
// 得到Document
Document doc = builder.build(fileURI);
// 名字空間
Namespace ns = Namespace.getNamespace("LIT",
"http://www.lit.edu.cn/student/");
// 得到根節點LIT:StuInfo
Element elmtStuInfo = doc.getRootElement();
// 取得所有LIT:student節點的集合
List lstStudents = elmtStuInfo.getChildren("student", ns);
// 修改bigmouse的CAD分數
for (int i = 0; i < lstStudents.size(); i++) {
// 當前學生節點
Element elmtStudent = (Element) lstStudents.get(i);
if (elmtStudent.getChildTextTrim("name", ns).equals("bigmouse")) {
// 所有課程節點的集合
List lstLesson = elmtStudent.getChildren("lesson", ns);
for (int j = 0; j < lstLesson.size(); j++) {
Element elmtLesson = (Element) lstLesson.get(j);
if (elmtLesson.getChildTextTrim("lessonName", ns)
.equals("autoCAD")) {
// 修改CAD分數,100分 @_@
elmtLesson.getChild("lessonScore", ns).setText("10");
System.out.println("** autoCAD:100");
}
}
}// end if
}// end for
// 添加一條學生記錄
elmtStuInfo
.addContent(
new Element("student", ns)
.addContent(new Element("name", ns).setText("fannWong"))
.addContent(new Element("sex", ns).setText("female"))
.addContent(new Element("lesson", ns)
.addContent(new Element("lessonName",ns).setText("math"))
.addContent(new Element("lessonScore",ns).setText("85")))
.addContent(new Element("lesson", ns)
.addContent(new Element("lessonName",ns).setText("English"))
.addContent(new Element("lessonScore",ns).setText("95"))))
.addContent(new Element("breakLine", ns));
System.out.println("** New Element added!");
// 調整一下格式,把實體引用放到最后面
// 先刪除,后追加。.
elmtStuInfo.removeChild("master", ns);
elmtStuInfo.addContent(new Element("master", ns).addContent("master")); //這句話,與原始文件有所不同,但總的作用就在本末添加上一個master.
// 輸出文檔
// 第一個參數是縮進字符串,這里是4個空格。
// 第二個參數是true,表示需要換行。
XMLOutputter printDoc = new XMLOutputter();
printDoc.output(doc, new FileOutputStream("C:/Tomcat 6.0/webapps/struts2.0/xml/SutInfo2.xml")); //輸出的文件,可以是原文件也可是自定義文件。
} catch (JDOMException jdome) {
System.out.println(jdome.getMessage());
} catch (FileNotFoundException fnfe) {
System.out.println(fnfe.getMessage());
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
}
}
}
說明:
本原代碼的作用是:1.讀取xml文件,修改名字為bigmouse的CAD成績。2.在末尾添加一條記錄。
在讀取結點時,最后的結點集全變成了java.util.List;命名空間有自己的定義類 Namespace
在jdk 中默認的沒有這個包:org.jdom.*.從網上下載:
http://www.jdom.org/
本小節就到這里,有興趣的可以分析一下原代碼。 下一節 SAX方式。