Java綠地(~ming~)

          Java 草地

          常用鏈接

          統(tǒng)計(jì)

          最新評(píng)論

          利用SAX和DOM對(duì)XML解析

          Xml解析

          Xml文件:

          1.聲明:<?xml version=”1.0” standalone=”yes/no” encoding=”UTF-8/GB2312” ?>


          2.
          是否有DTD(文檔類型定義)<!DOCTYPE typeofdoc SYSTEM/PUBLIC “dtdname.dtd”>


          3.
          所有標(biāo)識(shí)必須有相應(yīng)的結(jié)束標(biāo)志,空標(biāo)識(shí)也必須關(guān)閉如:<br/>,嚴(yán)格區(qū)分大小寫


          4.<![CDATA[
          這樣可以輸出一些特殊符號(hào)如<]]>//DTD字符或文本:<!ELEMENT user(#PCDATA)>


          5.Namespaces(xml
          文件定位DTD文件):<document xmlns:xl=”URL”><xl:table>wood</table>


          6.entity
          實(shí)體:<!DOCTYPE filename[<!ENTITY name “content”>]>    調(diào)用;&name


          7.DTD
          文件:<!ELEMENT datasource(driver,url,user,password)>//a:一次;a?:<=1;a+:>=1;a*:


          8.
          實(shí)例;<database-conf>

          <datasource>

                    <driver>com.mysql.jdbc.Driver</driver>

                    <url>jdbc:mysql://localhost:3306/test </url>

                    <user>root</user>

                    <password></password>

          </datasource>

          </database-conf>



          9.
          讀樹元素:StringBuffer讀入元素,最后存在HashtableProperties里面,并作為返回類型

          import java.util.Properties;import org.xml.sax.Attributes;

          import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;

          public class XMLConfigParser extends DefaultHandler{//可重載startElement等方法

          //DefaultHandler繼承了所有ContentHandler,Error,DTDHandler,EntityResolver接口

             private Properties props;//繼承了Hashtable,表示一個(gè)持久屬性集合

             private StringBuffer currentValue=new StringBuffer();//類似字符串緩沖區(qū),不能修改

               public XMLConfigParser(){  this.props=new Properties();   }

               public Properties getProps(){  return this.props;  }

             public void startElement(String uri,String localName,String qName,

                     Attributes attributes)throws SAXException{//Attributesxml屬性列表接口

                 currentValue.delete(0,currentValue.length()); }

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

                 currentValue.append(ch,start,length); }

          public void endElement(String uri,String localName,String qName)throws SAXException{

              props.put(qName.toLowerCase(), currentValue.toString().trim());}}//小寫


          10.
          調(diào)用SAX解析: import java.net.URL;import java.util.Properties;

          import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;

          public class DatabaseConfigParser {private Properties props;

          public Properties getProps(){    return this.props;}

          public void parse(String filename)throws Exception{

          XMLConfigParser handler=new XMLConfigParser();

          SAXParserFactory factory=SAXParserFactory.newInstance();//解析器,調(diào)用適當(dāng)handler

          SAXParser parser=factory.newSAXParser();//xmlDefaultHandler對(duì)象傳遞給解析器

          URL confURL=XMLConfigParser.class.getClassLoader(類加載器).getResource(filename);

              parser.parse(confURL.toString(), handler); props=handler.getProps();  }


          測試:public static void main(String[] args){

              DatabaseConfigParser databaseConfig=new DatabaseConfigParser();

              try{    databaseConfig.parse("database.conf.xml");

                      Properties dbProps=databaseConfig.getProps();

                      System.out.println(dbProps.getProperty("driver"));

                      System.out.print(dbProps.getProperty("url"));}

          catch(Exception e){ e.printStackTrace();    }}}

           


          使用:import java.util.Properties;import java.sql.*;

          public class Use{  private Connection conn; Properties dbProps;

                public Use()throws Exception{//通過構(gòu)造函數(shù)獲得

          DatabaseConfigParser databaseConfig=new DatabaseConfigParser();

                 databaseConfig.parse("database.conf.xml");

          this.dbProps=databaseConfig.getProps();

           public Connection getConnection()throws java.sql.SQLException{

             try{ Class.forName(dbProps.getProperty(“driver”));}

             catch(java.lang.ClassNotFoundException e){System.out.println(“not found”);}

             return java.sql.DriverManager.getConnection(dbProps.getProperty(“url”),

                    dbProps.getProperty(“user”), dbProps.getProperty(“password”));}

           


          11.
          利用DOM進(jìn)行解析:import org.w3c.dom.*;import org.apache.xerces.parsers.DOMParser;

          public class FirstDOMParser{  public static void main(String[] args) {

             try {DOMParser parser = new DOMParser(); parser.parse("D:\\Lixin\\ bank.xml");

             Document doc = parser.getDocument();// Document對(duì)象代表整個(gè)文檔,包含所有Node對(duì)象

             NodeList nodelist = doc.getElementsByTagName("client");

                      System.out.println(nodelist.getLength() + " <client> elements."); 

             nodelist = doc.getElementsByTagName("employee");//返回子孫節(jié)點(diǎn)nodelist對(duì)象

                      System.out.println(nodelist.getLength() + " <employee> elements.");

                  } catch (Exception e) { e.printStackTrace(System.err);  }    }}

          posted on 2007-06-29 11:46 mrklmxy 閱讀(641) 評(píng)論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 化隆| 徐汇区| 吴旗县| 丹巴县| 昌乐县| 鹤庆县| 镇平县| 合山市| 安多县| 东丽区| 深泽县| 黑山县| 天柱县| 台山市| 驻马店市| 武邑县| 浦东新区| 曲沃县| 兴城市| 建湖县| 固原市| 稻城县| 沂源县| 东辽县| 洱源县| 金乡县| 巴彦淖尔市| 将乐县| 新晃| 潢川县| 咸阳市| 游戏| 遂昌县| 武功县| 涿鹿县| 睢宁县| 无棣县| 乳山市| 项城市| 宝应县| 峡江县|