XML和JSP互動技術(2)

來源:互聯網
上載者:User
js|xml|互動

 

在這裡我們編寫一個myHandler的類,它用來實施HandlerBase介面,並且覆蓋介面的三個主要方法startElement(String tag, AttributeList attrs)、characters(char[] ch, int start, int length)、endElement(String name)以便能對XML檔案進行操作。

  為了儲存資料以便外部程式能夠調用本類中的資料,我們採用了雜湊表結構來儲存解析XML檔案後的所有節點名字以及節點的資料值,startElement()方法主要用來讀取XML檔案中的節點名稱,characters()方法主要用來根據節點名稱讀取節點資料,endElement()方法主要是在一個XML節點處理完畢後將這對節點名稱和節點資料儲存在雜湊表中。

  在外部程式中我們只需要調用getTable()方法返回一個雜湊表對象就可以讀取所有的節點和節點資料值了。

  代碼不多,而且我在下面添加了很多注釋,應該很好看懂了。

  myHandler.java檔案

  file://檔案放置在包com.jsp21.www中

  package com.jsp21.www;

  file://匯入相關的java API

  import java.io.*;

  import org.w3c.dom.*;

  import org.xml.sax.*;

  import javax.xml.parsers.SAXParser;

  import javax.xml.parsers.SAXParserFactory;

  import java.util.Hashtable;

  import java.util.Enumeration;

  // myHandler類實現HandlerBase介面;

  public class myHandler extends HandlerBase {

  private String myElement = null; file://XML檔案中的標記名稱;

  private String myValue = null; file://XML檔案中標記對應的值;

  private Hashtable mytable = new Hashtable(); file://用來儲存XML檔案中所有的資料;

  file://得到儲存有XML資料的雜湊表Hashtable;

  public Hashtable getTable() {

   return mytable;

  }

  file://覆蓋HandlerBase介面中的startElement方法,讀取一行XML資料的開始標記時候執行此方法;

  // tag代表XML中的標記,如前面XML檔案中的NAME AGE等;

  public void startElement(String tag, AttributeList attrs)

   throws SAXException {

   myElement = tag;

  }

  file://覆蓋HandlerBase介面中的characters方法,主要用來得到和之間具體的資料;

  // 當對應myElement的標記發現值後,也就是startElement方法執行完畢後,就會觸發這個characters方法來得到具體的數值;

  file://如myElement="姓名"時候,myValue就會等於"劉玉鋒";

  public void characters(char[] ch, int start, int length)

  throws SAXException {

    myValue = new String(ch, start, length);

  }

  file://覆蓋HandlerBase介面中的endElement方法,主要用來在一行XML資料讀取完畢後進行自己的處理;

  // 當XML檔案中一行標記讀取完畢後,觸發此endElement方法;

  file://如果存在對應的結束標記,就將前面得到的標記myElement和值myValue

  file://放入到mytable雜湊表中;

  public void endElement(String name) throws SAXException {

  if ( myElement.equals(name) ) {

   mytable.put(myElement, myValue);

  }

  }

  }

好了,編譯這個class,並把myHandler.class檔案放置在CLASSPATH能找到的路徑中,比如Tomcat中應用程式的Web-inf\classes\com\jsp21\www目錄下。

XML和JSP互動技術(4)

  5)Jsp程式調用XML

  在這裡,我們寫了一個比較簡單的Jsp程式來調用前面的myHandler類,並通過這個類來讀取personal.xml檔案中的內容,最後顯示在Jsp頁面中。

  首先我們建立一個SAXParserFactory的執行個體saxpF,然後通過這個執行個體來建立一個SAXParser的執行個體saxpser(可以用來解析XML檔案內容),當然還要建立myHandler類的執行個體,最後通過saxpser.parse()方法將XML檔案和myHandler類執行個體關聯起來(這樣會執行myHandler中的幾個事件處理方法)。

  (說明:SAXParserFactory是一個抽象類別,定義了一個factory API可以讓Java應用程式配置或者是獲得一個SAX的解析器(SAX parser)。SAXParser也是一個抽象類別,通過這個類應用程式可以解析XML檔案的內容。)

  到這時候XML所有內容都儲存在了myHandler類執行個體中的雜湊表中,最後通過getTable()方法得到這個雜湊表對象,將雜湊表中的鍵儲存在集合Enumeration中,使用一個迴圈來讀取哈系表中的資料並顯示在Jsp頁面上。我們用集合的目的在於使這個Jsp程式盡量通用,傳遞一個XML檔案名稱字就可以讀出所有內容,當然你也可以不使用集合而使用(String)hshTable.get("姓名")這樣的方法來讀取特定的節點值。

  下面是Jsp檔案代碼,請儲存為jspxml.jsp檔案


  <%@ page contentType="text/html;charset=gb2312"%>

  <%@ page language="java" import="com.jsp21.www.*,java.io.*" %>

  <%@ page language="java" import="org.w3c.dom.*,org.xml.sax.*" %>

  <%@ page language="java" import="javax.xml.parsers.SAXParser" %>

  <%@ page language="java" import="javax.xml.parsers.SAXParserFactory" %>

  <%@ page language="java" import="java.util.*" %>

  <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
   
   這是一個XML+JSP的例子,讀取XML檔案中的內容
    try {

     file://得到用戶端請求的file檔案名稱字

     String newFile=request.getParameter("file");

     file://如果沒有file值,列印資訊並返回

     if(newFile==null||newFile.equals(""))

      {out.println("請使用參數如jspxml.jsp?file=e:\\\\personal.xml");

       return;

      }

    String xmlFile ="file:" + new File(newFile);

    file://建立一個SAXParserFactory的執行個體saxpF

    SAXParserFactory saxpF = SAXParserFactory.newInstance();

    file://通過saxpF建立一個SAXParser的執行個體saxpser

    SAXParser saxpser = saxpF.newSAXParser();

    file://建立一個myHandler對象的執行個體

    myHandler handler = new myHandler();

    // 將XML檔案和handler事件關聯起來,利用handler來解析XML檔案中的內容



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.