數據加載中……
          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 叮當小馬 閱讀(287) 評論(0)  編輯  收藏 所屬分類: XML

          主站蜘蛛池模板: 阿尔山市| 雷州市| 阳信县| 葵青区| 焉耆| 法库县| 尚义县| 分宜县| 靖边县| 乌拉特中旗| 珠海市| 岐山县| 宜川县| 剑河县| 白玉县| 元谋县| 田东县| 惠安县| 黄骅市| 壤塘县| 神农架林区| 乳山市| 繁峙县| 家居| 祁连县| 西华县| 太原市| 鹤山市| 太谷县| 靖远县| 玉溪市| 当涂县| 大竹县| 榆社县| 明光市| 邹平县| 邓州市| 德保县| 皋兰县| 沧州市| 民县|