數(shù)據(jù)加載中……
          JAVA XML 解析之三 -JDom
          2008年4月21日  Edited By DingDangXiaoMa
          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ō)明:
          本原代碼的作用是: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

          主站蜘蛛池模板: 正镶白旗| 延庆县| 丰城市| 盐津县| 高州市| 阿荣旗| 金湖县| 遂平县| 新田县| 蓝山县| 盐亭县| 晋宁县| 班玛县| 谢通门县| 玉田县| 杂多县| 西吉县| 乃东县| 星子县| 德格县| 金溪县| 靖宇县| 青海省| 阜康市| 武冈市| 阿拉善右旗| 怀来县| 贵州省| 梅河口市| 波密县| 土默特右旗| 错那县| 隆尧县| 微山县| 合作市| 格尔木市| 惠安县| 栖霞市| 甘洛县| 南江县| 南华县|