JAVA XML 解析之三 -JDom
2008年4月21日 Edited By DingDangXiaoMa
JDOM的目的是成為Java特定文檔模型,它簡(jiǎn)化與XML的交互并且比使用DOM實(shí)現(xiàn)更快
example:
本原代碼的作用是:1.讀取xml文件,修改名字為bigmouse的CAD成績(jī)。2.在末尾添加一條記錄。
在讀取結(jié)點(diǎn)時(shí),最后的結(jié)點(diǎn)集全變成了java.util.List;命名空間有自己的定義類 Namespace
在jdk 中默認(rèn)的沒(méi)有這個(gè)包:org.jdom.*.從網(wǎng)上下載:http://www.jdom.org/
本小節(jié)就到這里,有興趣的可以分析一下原代碼。 下一節(jié) SAX方式。
JDOM的目的是成為Java特定文檔模型,它簡(jiǎn)化與XML的交互并且比使用DOM實(shí)現(xiàn)更快
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"); //這是網(wǎng)絡(luò)上的資料,也可以定義為本地資料,采用相對(duì)路徑的方式。
}
/**
* 解析文檔
*
* @param fileURI
*/
private void parserXMLFile(String fileURI) {
try {
// 獲得org.jdom.input.SAXBuilder的一個(gè)實(shí)例,用來(lái)獲得XML文檔。
// 參數(shù)false表示不進(jìn)行驗(yàn)證。
// 參數(shù)中沒(méi)有指定使用什么解析器,因此使用默認(rèn)的解析器。
SAXBuilder builder = new SAXBuilder(false);
// 得到Document
Document doc = builder.build(fileURI);
// 名字空間
Namespace ns = Namespace.getNamespace("LIT",
"http://www.lit.edu.cn/student/");
// 得到根節(jié)點(diǎn)LIT:StuInfo
Element elmtStuInfo = doc.getRootElement();
// 取得所有LIT:student節(jié)點(diǎn)的集合
List lstStudents = elmtStuInfo.getChildren("student", ns);
// 修改bigmouse的CAD分?jǐn)?shù)
for (int i = 0; i < lstStudents.size(); i++) {
// 當(dāng)前學(xué)生節(jié)點(diǎn)
Element elmtStudent = (Element) lstStudents.get(i);
if (elmtStudent.getChildTextTrim("name", ns).equals("bigmouse")) {
// 所有課程節(jié)點(diǎn)的集合
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分?jǐn)?shù),100分 @_@
elmtLesson.getChild("lessonScore", ns).setText("10");
System.out.println("** autoCAD:100");
}
}
}// end if
}// end for
// 添加一條學(xué)生記錄
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!");
// 調(diào)整一下格式,把實(shí)體引用放到最后面
// 先刪除,后追加。.
elmtStuInfo.removeChild("master", ns);
elmtStuInfo.addContent(new Element("master", ns).addContent("master")); //這句話,與原始文件有所不同,但總的作用就在本末添加上一個(gè)master.
// 輸出文檔
// 第一個(gè)參數(shù)是縮進(jìn)字符串,這里是4個(gè)空格。
// 第二個(gè)參數(shù)是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());
}
}
}
說(shuō)明: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"); //這是網(wǎng)絡(luò)上的資料,也可以定義為本地資料,采用相對(duì)路徑的方式。
}
/**
* 解析文檔
*
* @param fileURI
*/
private void parserXMLFile(String fileURI) {
try {
// 獲得org.jdom.input.SAXBuilder的一個(gè)實(shí)例,用來(lái)獲得XML文檔。
// 參數(shù)false表示不進(jìn)行驗(yàn)證。
// 參數(shù)中沒(méi)有指定使用什么解析器,因此使用默認(rèn)的解析器。
SAXBuilder builder = new SAXBuilder(false);
// 得到Document
Document doc = builder.build(fileURI);
// 名字空間
Namespace ns = Namespace.getNamespace("LIT",
"http://www.lit.edu.cn/student/");
// 得到根節(jié)點(diǎn)LIT:StuInfo
Element elmtStuInfo = doc.getRootElement();
// 取得所有LIT:student節(jié)點(diǎn)的集合
List lstStudents = elmtStuInfo.getChildren("student", ns);
// 修改bigmouse的CAD分?jǐn)?shù)
for (int i = 0; i < lstStudents.size(); i++) {
// 當(dāng)前學(xué)生節(jié)點(diǎn)
Element elmtStudent = (Element) lstStudents.get(i);
if (elmtStudent.getChildTextTrim("name", ns).equals("bigmouse")) {
// 所有課程節(jié)點(diǎn)的集合
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分?jǐn)?shù),100分 @_@
elmtLesson.getChild("lessonScore", ns).setText("10");
System.out.println("** autoCAD:100");
}
}
}// end if
}// end for
// 添加一條學(xué)生記錄
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!");
// 調(diào)整一下格式,把實(shí)體引用放到最后面
// 先刪除,后追加。.
elmtStuInfo.removeChild("master", ns);
elmtStuInfo.addContent(new Element("master", ns).addContent("master")); //這句話,與原始文件有所不同,但總的作用就在本末添加上一個(gè)master.
// 輸出文檔
// 第一個(gè)參數(shù)是縮進(jìn)字符串,這里是4個(gè)空格。
// 第二個(gè)參數(shù)是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成績(jī)。2.在末尾添加一條記錄。
在讀取結(jié)點(diǎn)時(shí),最后的結(jié)點(diǎn)集全變成了java.util.List;命名空間有自己的定義類 Namespace
在jdk 中默認(rèn)的沒(méi)有這個(gè)包:org.jdom.*.從網(wǎng)上下載:http://www.jdom.org/
本小節(jié)就到這里,有興趣的可以分析一下原代碼。 下一節(jié) SAX方式。
posted on 2008-04-21 17:16 叮當(dāng)小馬 閱讀(287) 評(píng)論(0) 編輯 收藏 所屬分類: XML