隨筆 - 3, 文章 - 152, 評(píng)論 - 17, 引用 - 0
          數(shù)據(jù)加載中……

          Java與XML(一)基礎(chǔ)

          JAXP API--嵌入不同的解釋器

          SAX解釋器+DOM解釋器+XSL轉(zhuǎn)換器

          javax.xml.parsers中加載XML文檔的類:
          DocumentBuilder
          DocumentBuildrFactory
          SAXParser
          SAXParserFactory
          =====================================
          SAX API

          SAX的XML解釋器:Apache的Xerces或Crimson

          處理XML文檔的接口:
          ContentHandler
          EntityResolver
          ErroHandler
          DTDHandler

          DeclHandler
          LexicalHandler
          ======================================
          DOM API

          兩個(gè)DOM標(biāo)準(zhǔn):DOM Level1 DOM Level 2 Core

          節(jié)點(diǎn)
          Node-節(jié)點(diǎn)類型接口層次結(jié)構(gòu)的根。
          Document-樹結(jié)構(gòu)的根
          Element-XML元素
          Text-元素內(nèi)的文本
          Attr-元素的特性
          CDATA Sectionn-CDATA
          NodeList-子節(jié)點(diǎn)的集合
          ProcessingInstruction-指令
          Comment-包含注釋的信息
          DocumentFragment-Document的消減版,用于在樹中移動(dòng)節(jié)點(diǎn)
          DocumentType-文檔類型定義的子集。
          Entity-DTD中的實(shí)體標(biāo)記
          EntityReference-XML文檔中的實(shí)體引用
          Notation-DTD中的符號(hào)標(biāo)記


          從程序中讀取X M L文檔基本上有三種方式:
          1把X M L只當(dāng)做一個(gè)文件讀取,然后自己挑選出其中的標(biāo)簽。這是黑客們的方法,我們不推薦這種方式。
          你很快會(huì)發(fā)現(xiàn)處理所有的特殊情況(包括不同的字符編碼,例外約定,內(nèi)部和外部實(shí)體,缺省屬性等)比想象的困難得多;
          你可能不能夠正確地處理所有的特殊情況,這樣你的程序會(huì)接收到一個(gè)非常規(guī)范的X M L文檔,卻不能正確地處理它。
          要避免這種想法:XML解析器似乎并不昂貴(大多數(shù)是免費(fèi)的)。
          2可以用解析器分析文檔并在內(nèi)存里創(chuàng)建對(duì)文檔內(nèi)容樹狀的表達(dá)方式:解析器將輸出傳遞給文檔對(duì)象模型,即DOM。
          這樣程序可以從樹的頂部開始遍歷,按照從一個(gè)樹單元到另一個(gè)單元的引用,從而找到需要的信息。
          3也可以用解析器讀取文檔,當(dāng)解析器發(fā)現(xiàn)標(biāo)簽時(shí)告知程序它發(fā)現(xiàn)的標(biāo)簽。
          例如它會(huì)告知它何時(shí)發(fā)現(xiàn)了一個(gè)開始標(biāo)簽,何時(shí)發(fā)現(xiàn)了一些特征數(shù)據(jù),以及何時(shí)發(fā)現(xiàn)了一個(gè)結(jié)束標(biāo)簽。
          這叫做事件驅(qū)動(dòng)接口,因?yàn)榻馕銎鞲嬷獞?yīng)用程序它遇到的有含義的事件。
          如果這正是你需要的那種接口,可以使用SAX。

          SAX是只讀的
          DOM可以從XML原文件中讀取文檔,也可以創(chuàng)建和修改內(nèi)存中的文檔。相比較而言,SAX是用來(lái)讀取XML文檔而不是書寫文檔。

          可擴(kuò)展樣式語(yǔ)言(XSL,eXtensible Sytlesheet Language)是一種基于XML的語(yǔ)言,
          它被設(shè)計(jì)用來(lái)轉(zhuǎn)換XML文檔到另一種XML文檔或轉(zhuǎn)換XML文檔為可翻譯對(duì)象。
          原始的XSL語(yǔ)言已經(jīng)被分割成三種不同的語(yǔ)言:
          1轉(zhuǎn)換工具(XSLT)是一種轉(zhuǎn)換XML文檔到其他XML文檔的語(yǔ)言
          2翻譯工具(XSLF—可以包括X S LT的使用)
          3XML分級(jí)命令處理工具(XPath)
          XSL有它自已的根,不管是在層疊樣式表(CSS)中還是在一種叫DSSSL(文檔樣式語(yǔ)義和規(guī)格語(yǔ)言—讀為'deessel')的語(yǔ)言中。
          隨著它的發(fā)展,XSL的樣式表現(xiàn)變得更接近于CSS和遠(yuǎn)離DSSSL

          ================================================================================

          Java與XML(二)用java編寫xml的讀寫程序

          這是讀取xml文件的java程序,我調(diào)試好的。采用的是dom方式讀取xml文件到Vector中。
          package src;
          import java.io.*;
          import java.util.Vector;
          import javax.xml.parsers.*;
          import org.w3c.dom.*;
          public class readxml {
           static Document document;
           private boolean validating;
           public readxml() {
           }
           public Vector toRead(String filename) {
            Vector title=new Vector();
            Vector content=new Vector();
            String myStr=new String();
            try {
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
             factory.setValidating(validating);
             DocumentBuilder builder = factory.newDocumentBuilder();
             document = builder.parse(new File(filename));
             document.getDocumentElement().normalize();
             Node node = document.getFirstChild();
             NodeList list = node.getChildNodes();
             for (int i = 0; i < list.getLength(); i++) {
              Node nodeitm = list.item(i);
              if (nodeitm.getNodeName().equals("Title")) {
               myStr=nodeitm.getFirstChild().getNodeValue();
               title.addElement(myStr);//getFirstChild()
              }
              if (nodeitm.getNodeName().equals("Content")) {
               myStr=nodeitm.getFirstChild().getNodeValue();
               content.addElement(myStr);
              }
             }
            } catch (Exception exp) {
             exp.printStackTrace();
             return null;
            }
            Vector all=new Vector();
            all.add(title);
            all.add(content);  
            return all;
           }

           public static void main(String[] args) {
            Vector A;
            readxml my = new readxml();
            A = my.toRead("f:\\tomcat5\\webapps\\myxml\\xmldata\\9.xml");
            for (int i = 0; i < A.size(); i++) {
             System.out.println(A.elementAt(i));
            }
           }
          }
          這是將xml寫入文件。其中,transformer.setOutputProperty(OutputKeys.ENCODING,"GB2312")關(guān)系到編碼問(wèn)題,非常重要。
          import org.w3c.dom.*;
          import javax.xml.parsers.*;
          import javax.xml.transform.*;
          import javax.xml.transform.dom.DOMSource;
          import javax.xml.transform.stream.StreamResult;
          import java.io.*;
          public class writexml {
           private Document document;
           private String filename;
           
           public writexml(String name) throws ParserConfigurationException{
            filename=name;
            DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
            DocumentBuilder builder=factory.newDocumentBuilder();
            document=builder.newDocument();
           }
           public void toWrite(String mytitle,String mycontent){
                Element root=document.createElement("WorkShop");
            document.appendChild(root);
            Element title=document.createElement("Title");
            title.appendChild(document.createTextNode(mytitle));
            root.appendChild(title);
            Element content=document.createElement("Content");
            content.appendChild(document.createTextNode(mycontent));
            root.appendChild(content);
            }
           public void toSave(){
            try{
             TransformerFactory tf=TransformerFactory.newInstance();
             Transformer transformer=tf.newTransformer();
             DOMSource source=new DOMSource(document);
             transformer.setOutputProperty(OutputKeys.ENCODING,"GB2312");
             transformer.setOutputProperty(OutputKeys.INDENT,"yes");
             PrintWriter pw=new PrintWriter(new FileOutputStream(filename));
             StreamResult result=new StreamResult(pw);
             transformer.transform(source,result);
            }
            catch(TransformerException mye){
             mye.printStackTrace();
            }
            catch(IOException exp){
             exp.printStackTrace();
            }
           }
           public static void main(String args[]){
            try{
            writexml myxml=new writexml("f:\\tomcat5\\webapps\\myxml\\xmldata\\9.xml");
            myxml.toWrite("中文題目","中文內(nèi)容");
            myxml.toSave();
            System.out.print("Your writing is successful.");
            }
            catch(ParserConfigurationException exp){
             exp.printStackTrace();
             System.out.print("Your writing is failed.");
            }  
           }
          }

          =================================================================================

          利用(二)中我寫的兩個(gè)函數(shù)(放在package src中),這次實(shí)現(xiàn)web頁(yè)面的操作。
          index.html:
          <%@ page language="java" pageEncoding="GB2312"%>
          <body>
          <p>&nbsp;</p>
          <p>&nbsp;</p>
          <p>&nbsp;</p>
          <table width="60%" border="1" align="center">
            <tr>
              <td>
                <p align="left"><font size="4" color="#003399">管理測(cè)試程序</font></p>
               
                <form name="readform" method=post action="load.jsp">
                  <p align="left"><font color="#FF0000">讀取xml文件: </font></p>
                  <p align="left"> <font color="#FF0000">
                    <input type="text" name="mypath" size="50" value="c:\\eclipse\\workspace\\myxml\\xmldata\\1.xml">
                    </font></p>
                  <p align="left">
                  <a href="#" onClick=submit()>讀取</a>
                  </p>
                  <p align="left">&nbsp;</p>
                </form>
               
                <form name="writeform" method=post action="create.jsp">
                  <p align="left"><font color="#FF0000">寫入xml文件:</font> </p>
                  <p align="left">請(qǐng)?zhí)顚懧窂?
                    <input type="text" name="mypath" width="100" size="50"
                    value="c:\\eclipse\\workspace\\myxml\\xmldata\\11.xml">
                  </p>
                  <p align="left">請(qǐng)?zhí)顚戭}目:
                    <input type="text" name="mytitle" width="100" size="50">
                  </p>
                 
                  <p align="left">請(qǐng)?zhí)顚憙?nèi)容:
                    <textarea name="mycontent" cols="100"></textarea>
                  </p>
                  <p align="left">
                  <a href="#" onClick=submit()>寫入</a>
                  </p>
                </form>
          </td>
            </tr>
          </table>
          </body>

          寫入的頁(yè)面create.jsp
          <%@ page language="java" pageEncoding="GB2312"%>
          <%@ page import="src.*" %>
          <%@ page import="org.w3c.dom.*"%>
          <%@ page import="javax.xml.parsers.*"%>
          <%@ page import="javax.xml.transform.*"%>
          <%@ page import="javax.xml.transform.dom.DOMSource"%>
          <%@ page import="javax.xml.transform.stream.StreamResult"%>
          <%@ page import="java.io.*"%>
          <html>
          <body>
          <%
          String mypath=(String)request.getParameter("mypath");
          String mytitle=(String)request.getParameter("mytitle");
          String mycontent=(String)request.getParameter("mycontent");

          mypath=new String(mypath.getBytes("ISO-8859-1"),"GB2312");
          mytitle=new String(mytitle.getBytes("ISO-8859-1"),"GB2312");
          mycontent=new String(mycontent.getBytes("ISO-8859-1"),"GB2312");
          try{
          writexml myxml=new writexml(mypath);
          myxml.toWrite(mytitle,mycontent);
          myxml.toSave();
          out.print("Your writing is successful.");
          }
          catch(ParserConfigurationException exp){
           exp.printStackTrace();
           out.print("Your writing is failed.");
          }
          %>
          </body>
          </html>


          讀取xml的頁(yè)面load.jsp:
          <%@ page language="java" pageEncoding="GB2312"%>
          <%@ page import="src.*" %>
          <%@ page import="java.io.*" %>
          <%@ page import="java.util.Vector" %>
          <%@ page import="javax.xml.parsers.*" %>
          <%@ page import="org.w3c.dom.*" %>
          <html>
          <body>
          <%
          Vector A=new Vector();
          String mypath=(String)request.getParameter("mypath"); 
          out.println(mypath);%>
          <p>
          <%
          readxml my = new readxml();
          A = my.toRead(mypath);
          for (int i = 0; i < A.size(); i++) {
          out.println(A.elementAt(i));
          %>
          <p>
          <%
          }
          %>
          </body>
          </html>
          這個(gè)寫程序還有一個(gè)缺陷,它只是創(chuàng)建xml格式和內(nèi)容,而不是改寫已有文件。
          如果您寫出了改寫文件的程序望能交流

          posted on 2005-02-15 11:28 閱讀(250) 評(píng)論(0)  編輯  收藏 所屬分類: Java_Xml

          主站蜘蛛池模板: 扎囊县| 锡林郭勒盟| 阆中市| 洪雅县| 嘉善县| 新化县| 吴桥县| 大余县| 独山县| 新民市| 正阳县| 施甸县| 洛浦县| 沾化县| 衡阳市| 名山县| 沂源县| 南昌市| 馆陶县| 建湖县| 贡山| 东山县| 阿巴嘎旗| 营口市| 交城县| 澳门| 黑河市| 岳西县| 长海县| 永年县| 靖西县| 涞水县| 许昌市| 杭锦后旗| 重庆市| 柳林县| 广饶县| 齐河县| 隆子县| 剑河县| 红桥区|