<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 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是用來讀取XML文檔而不是書寫文檔。

    可擴(kuò)展樣式語言(XSL,eXtensible Sytlesheet Language)是一種基于XML的語言,
    它被設(shè)計(jì)用來轉(zhuǎn)換XML文檔到另一種XML文檔或轉(zhuǎn)換XML文檔為可翻譯對(duì)象。
    原始的XSL語言已經(jīng)被分割成三種不同的語言:
    1轉(zhuǎn)換工具(XSLT)是一種轉(zhuǎn)換XML文檔到其他XML文檔的語言
    2翻譯工具(XSLF—可以包括X S LT的使用)
    3XML分級(jí)命令處理工具(XPath)
    XSL有它自已的根,不管是在層疊樣式表(CSS)中還是在一種叫DSSSL(文檔樣式語義和規(guī)格語言—讀為'deessel')的語言中。
    隨著它的發(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)系到編碼問題,非常重要。
    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頁面的操作。
    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">管理測試程序</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>

    寫入的頁面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的頁面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 閱讀(241) 評(píng)論(0)  編輯  收藏 所屬分類: Java_Xml

    主站蜘蛛池模板: 四虎国产精品成人免费久久| 亚洲娇小性色xxxx| 国产免费黄色无码视频| 亚洲精品一级无码鲁丝片| 九九视频高清视频免费观看| 亚洲精品无码久久毛片| 青青青视频免费观看| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 又黄又爽又成人免费视频| 亚洲人成人77777网站不卡| 青青草免费在线视频| 亚洲精品蜜夜内射| 免费人成在线观看网站视频| 麻豆69堂免费视频| 亚洲免费观看视频| 1000部夫妻午夜免费| 亚洲AV无码专区在线亚| 免费又黄又爽又猛的毛片 | 91av免费在线视频| 久久亚洲精品成人| 国产卡一卡二卡三免费入口| 亚洲AV色欲色欲WWW| 亚洲精品视频免费观看| 91大神在线免费观看| 亚洲偷自拍另类图片二区| 亚洲高清免费视频| 免费看搞黄视频网站| 精品久久亚洲中文无码| www.亚洲色图.com| 99久久人妻精品免费一区| 亚洲国产成人精品无码区二本| 亚洲国产成人a精品不卡在线| a级毛片免费播放| 亚洲色欲色欲www在线播放| 亚洲乱码日产精品a级毛片久久| 午夜视频在线免费观看| 亚洲av永久无码精品网址| 久久夜色精品国产亚洲| 成人a免费α片在线视频网站| 国产免费A∨在线播放|