posts - 37, comments - 8, trackbacks - 0, articles - 0

          jsp程序設計:JDOM操作xml

          Posted on 2008-10-25 08:07 夢與橋 閱讀(879) 評論(0)  編輯  收藏 所屬分類: jsp程序設計
          1、jdom的基礎知識及包與類的說明,可到網上搜索,也可查看jdom api,這里不再羅列,提供一個地方:http://www.java2000.net/p122。下載jdom.jar的地址:http://www.jdom.org/dist/binary/
          2、使用JDOM創建和讀取XML文件
          一般步驟:
          1)建立元素及其內容:建立一個元素作為根結點,建立根元素的子結點并加入到根結點,子結點若有子結點就建立它們并加入到其父結點。也可以橫向一層層地建立,只要有條理即可。
          2)以根結點為根元素建立文件(Document對象)。
          3)建立XML文件。
          4)使用org.output包中的方法建立輸出流對象
          5)使用輸出流對象的output方法將Document對象輸出到文件中,完成XML文件的建立。
          6)實例slDisplay.jsp代碼如下:
          <%@page contentType="text/html;charset=gb2312" %>
          <%@page import="org.jdom.*,org.jdom.input.*,org.jdom.output.XMLOutputter,
          java.io.*,org.jdom.output.Format,java.util.*"
          %>
          <html>
          <head>
          <title>JDOM讀取XML文件實例</title>
          </head>
          <body>
          <%
              Element root,member,name,sex,ern;
              
          //建立根元素
              root
          =new Element("文學沙龍");
              
          //建立根元素的第一個元素
              member
          =new Element("成員");
              name
          =new Element("姓名");
              sex
          =new Element("性別");
              ern
          =new Element("時代");
              name.setText(
          "李白");
              sex.setText(
          "");
              ern.setText(
          "");
              member.addContent(name);
              member.addContent(sex);
              member.addContent(ern);
              root.addContent(member);
              
          //建立根元素的第二個元素
              member
          =new Element("成員");
              name
          =new Element("姓名");
              sex
          =new Element("性別");
              ern
          =new Element("時代");
              name.setText(
          "蘇軾");
              sex.setText(
          "");
              ern.setText(
          "北宋");
              member.addContent(name);
              member.addContent(sex);
              member.addContent(ern);
              root.addContent(member);
              
          //建立根元素的第三個元素
              member
          =new Element("成員");
              name
          =new Element("姓名");
              sex
          =new Element("性別");
              ern
          =new Element("時代");
              name.setText(
          "李清照");
              sex.setText(
          "");
              ern.setText(
          "南宋");
              member.addContent(name);
              member.addContent(sex);
              member.addContent(ern);
              root.addContent(member);
              
          //以根元素建立文件
              Document doc
          =new Document(root);
              
          //使用相對路徑,默認到tomcat目錄下
              
          //FileOutputStream f=new FileOutputStream("salon.xml");
              
          String strDirPath = new File(request.getSession().getServletContext().getRealPath(request.getContextPath())).getParent();//絕對路徑
              FileOutputStream f
          =new FileOutputStream(strDirPath+"/salon.xml");
              
          //建立輸出流
              XMLOutputter out1
          =new XMLOutputter();
              
          //格式化文件
              Format format
          =Format.getPrettyFormat();
              format.setEncoding(
          "gb2312");
              out1.setFormat(format);
              
          //將文件輸出到XML文件中
              out1.output(doc,f);
          %>
          <table border="1" align="center">
          <caption>文學沙龍</caption>
          <tr>
              
          <td>姓名</td>
              
          <td>性別</td>
              
          <td>時代</td>
          </tr>
          <%
            
          //獲取數據
            SAXBuilder builder
          =new SAXBuilder();//創建對象
            
          //建立Document對象
            
          //可以使用strDirpath,也中以重新獲取絕對路徑
            
          //Document readDocument=builder.build("file:\\"+strDirPath+"/salon.xml");
            Document readDocument
          =builder.build("file:\\"+pageContext.getServletContext().getRealPath("salon.xml"));  
            
          //得到根元素
            Element rootElement
          =readDocument.getRootElement();
            
          //得到根元素列表,實際上就是user元素列表
            List list
          =rootElement.getChildren();
            
          //---輸出數據---
            
          for(Iterator i=list.iterator();i.hasNext();){
                Element current
          =(Element)i.next();
                out.print(
          "<tr>");
                out.println(
          "<td>"+current.getChildText("姓名")+"</td>");
                out.println(
          "<td>"+current.getChildText("性別")+"</td>");
                out.println(
          "<td>"+current.getChildText("時代")+"</td>");
                out.println(
          "</tr>");
            }
          %>
          </table>
          </body>
          </html>
          2、使用JDOM修改XML文件:slUpdate.jsp代碼如下:
          <%@page contentType="text/html;charset=gb2312" %>
          <%@page import="org.jdom.*,org.jdom.input.*,org.jdom.output.XMLOutputter,
          java.io.*,org.jdom.output.Format,java.util.*"
          %>
          <html>
          <head>
          <title>JDOM修改XML文件</title>
          </head>
          <body>
          <%
          SAXBuilder sb
          =new SAXBuilder();//建立一個解析器
          //構造一個Document,讀入salon.xml文件的內容
          Document doc
          =sb.build(new FileInputStream(pageContext.getServletContext().getRealPath("salon.xml"))); 
          Element root
          =doc.getRootElement();
          List salons
          =root.getChildren();
          //得到根元素的第一個子元素和后者的“姓名”子元素
          Element salon
          =(Element)salons.get(0);
          Element name
          =(Element)salon.getChild("姓名");
          //“姓名”添加一個屬性
          Attribute a
          =new Attribute("評價","詩仙");
          name.setAttribute(a);

          //更改根元素的第二個元素的子元素"時代".
          salon
          =(Element)salons.get(1);
          Element ern
          =salon.getChild("時代");//得到指定的子元素
          ern.setText(
          "");

          //替換根元素的第三個元素,但破壞了格式,這里沒有調整
          salon
          =(Element)salons.get(2);
          salon.removeContent();
          name
          =new Element("姓名");
          Element sex
          =new Element("性別");
          ern
          =new Element("時代");
          name.setText(
          "卓文君");
          sex.setText(
          "");
          ern.setText(
          "");
          salon.addContent(name);
          salon.addContent(sex);
          salon.addContent(ern);

          //文件輸回到XML文件中
          XMLOutputter out1
          =new XMLOutputter();
          out1.output(doc,
          new FileOutputStream(pageContext.getServletContext().getRealPath("salon.xml")));
          %>
          <table border="1" align="center">
          <caption>文學沙龍</caption>
          <tr>
              
          <td>姓名</td>
              
          <td>性別</td>
              
          <td>時代</td>
          </tr>
          <%
            
          //獲取數據
            SAXBuilder builder
          =new SAXBuilder();//創建對象
            
          //建立Document對象
            
          //可以使用strDirpath,也中以重新獲取絕對路徑
            
          //Document readDocument=builder.build("file:\\"+strDirPath+"/salon.xml");
            Document readDocument
          =builder.build("file:\\"+pageContext.getServletContext().getRealPath("salon.xml"));  
            
          //得到根元素
            Element rootElement
          =readDocument.getRootElement();
            
          //得到根元素列表,實際上就是user元素列表
            List list
          =rootElement.getChildren();
            
          //---輸出數據---
            
          for(Iterator i=list.iterator();i.hasNext();){
                Element current
          =(Element)i.next();
                out.print(
          "<tr>");
                out.println(
          "<td>"+current.getChildText("姓名")+"</td>");
                out.println(
          "<td>"+current.getChildText("性別")+"</td>");
                out.println(
          "<td>"+current.getChildText("時代")+"</td>");
                out.println(
          "</tr>");
            }
          %>
          </table>
          </body>
          </html>
          3、使用JDOM修改XML文件:data.jsp代碼如下:
          <%@ page contentType="text/html;charset=gb2312"%>
          <%@ page import="javax.xml.parsers.*,org.jdom.*,org.jdom.output.XMLOutputter,java.io.*,java.util.*, java.sql.*,org.jdom.output.Format"%>
          <html>
          <head>
          <title> JDOM把數據庫的表轉化成XML文件示例</title>
          </head>
          <body>
          JDOM把數據庫的表轉化成XML文件
          <br>
          <%
          //建立數據庫連接并獲取學生表的記錄集和結構
          Class.forName(
          "sun.jdbc.odbc.JdbcOdbcDriver"); //加載橋驅動程序
          Connection con
          =DriverManager.getConnection("jdbc:odbc:Demo"); //建立數據庫連接
          Statement stmt
          =con.createStatement();
          ResultSet rs
          =stmt.executeQuery("select * from information"); //獲取結果集
          rs.next();
          out.println(rs.getString(
          "字段1"));
          //獲得結果集的結構
          ResultSetMetaData rsmd
          =rs.getMetaData();
          //獲得結果集的列數,也就是數據項的數目
          int numcols=rsmd.getColumnCount();
          //記錄集到XML文件的轉換
          Element root,ele,name; 
          //定義Element類的對象根元素(root)
          root
          =new Element("student"); //建立根元素

          //循環, 將結果集中的每一條記錄轉換成一個元素(標記名為“第…個記錄”)
          while(rs.next())
          {ele
          =new Element(""+rs.getRow()+"條紀錄"); //設置元素,名為“第…個記錄”
          out.println(ele);

          for(int i=1;i<=numcols;i++//循環,將一條記錄中的每個字段轉換成一個元素
          {
          // getColumnLabel(i) 獲取第i個列的字段名(列數從0開始)。
          //out.println(rs.getString(i));
          name
          =new Element(rsmd.getColumnLabel(i)); //以獲得的字段名為標記名設置元素
          name.setText(rs.getString(i)); 
          //獲取字段內容作為字段名元素的內容
          ele.addContent(name); 
          //將字段名元素置為記錄的子元素

          }
          root.addContent(ele); 
          //將記錄元素置為根元素的子元素
          }
          Document doc
          =new Document(root); //以根元素建立文檔
          FileOutputStream f
          =new FileOutputStream(pageContext.getServletContext().getRealPath("DB.xml"));
          XMLOutputter out1
          =new XMLOutputter(); //將文檔輸出形成XML文件
          Format format
          =Format.getPrettyFormat(); //格式化文檔
          format.setEncoding(
          "gb2312"); //由于默認的編碼是utf-8,中文將顯示為亂碼,所以設為gbk
          out1.setFormat(format);
          out1.output(doc,f);
          rs.close(); con.close(); 
          //關閉各個對象
          out.println(
          "數據庫表Information已成功地轉化成XML文件DB.xml!");
          %>
          </body>
          </html>
          注:這里使用的數據庫文件為Acces的,連接方式為ODBC+數據源方式,使用的表為information,可以建立這樣一個表,內容不限,配置數據源即可。當然可以連接其他數據庫,這里只是圖個方便。
          主站蜘蛛池模板: 湖南省| 临澧县| 阜南县| 宁津县| 延津县| 原平市| 千阳县| 建宁县| 普定县| 溧水县| 梧州市| 文山县| 临潭县| 江阴市| 东台市| 武邑县| 上犹县| 临沭县| 宁海县| 图片| 大田县| 丰台区| 鲜城| 凤冈县| 安徽省| 府谷县| 镇雄县| 铜陵市| 禄丰县| 鸡西市| 灵台县| 陆河县| 扎赉特旗| 调兵山市| 林周县| 金秀| 奉贤区| 临颍县| 崇州市| 巩留县| 余江县|