Java綠地(~ming~)

          Java 草地

          常用鏈接

          統(tǒng)計

          最新評論

          利用SAX和DOM對XML解析

          Xml解析

          Xml文件:

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


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


          3.
          所有標識必須有相應的結束標志,空標識也必須關閉如:<br/>,嚴格區(qū)分大小寫


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


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


          6.entity
          實體:<!DOCTYPE filename[<!ENTITY name “content”>]>    調用;&name


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


          8.
          實例;<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,表示一個持久屬性集合

             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.
          調用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();//解析器,調用適當handler

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

          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{//通過構造函數獲得

          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進行解析: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對象代表整個文檔,包含所有Node對象

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

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

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

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

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

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


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


          網站導航:
           
          主站蜘蛛池模板: 平昌县| 宣威市| 岱山县| 和龙市| 安宁市| 长宁区| 松阳县| 南宁市| 南丹县| 乐业县| 孟津县| 奉化市| 全南县| 高淳县| 河间市| 藁城市| 榕江县| 全椒县| 乌苏市| 永顺县| 东丽区| 昌乐县| 红桥区| 靖宇县| 崇州市| 辽阳市| 翁源县| 甘泉县| 江陵县| 汉源县| 临沧市| 凤翔县| 北安市| 三明市| 石楼县| 乌兰浩特市| 都匀市| 潮安县| 定陶县| 湖南省| 岳西县|