数据加载中……
JAVA XML 解析之三 -JDom
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方式。

posted on 2008-04-21 17:16 叮当小马 阅读(242) 评论(0)  编辑  收藏 所属分类: XML


只有注册用户登录后才能发表评论。


网站导航: