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

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

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

    posts - 33,comments - 21,trackbacks - 0
    轉(zhuǎn)貼自賽迪網(wǎng)(http://tech.ccidnet.com/art/294/20021120/31320_2.html)


    如果一個(gè)XML文檔符合上述文檔所表現(xiàn)出來(lái)的一些特征,即可稱之為良構(gòu)的XML文檔。這些特征如下:

    1. 每個(gè)元素必須有起始和結(jié)束標(biāo)記;

    2. 文檔只有一個(gè)根元素;

    3. 正確地對(duì)空元素進(jìn)行格式化;

    4. 開(kāi)始和結(jié)束標(biāo)注必須匹配(區(qū)分大小寫(xiě));

    5. 元素必須正確地嵌套;

    6. 屬性值必須用引號(hào)括起來(lái)。

    IsXMLAvailable.java 是用于進(jìn)行XML文檔良構(gòu)檢驗(yàn)的Java程序,代碼如下:

    //IsXMLAvailable.java
    import java.io.File;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import org.xml.sax.*;
    public class IsXMLAvailable{
      public static void main(String argv[]){
      if (argv.length!=1){
      System.out.println("參數(shù)錯(cuò)誤!");
      System.exit(1);
      }
      try{
      //取得工廠類的一個(gè)新實(shí)例
      DocumentBuilderFactory dbf=
             DocumentBuilderFactory.newInstance();
      //通過(guò)靜態(tài)方法創(chuàng)建DocumentBuilder 實(shí)例
      //準(zhǔn)備建立Document 對(duì)象
      DocumentBuilder db=dbf.newDocumentBuilder();
      //建立XML 文檔對(duì)象
      Document doc=db.parse(new File(argv[0]));
      //格式化文檔
      doc.getDocumentElement().normalize();
      System.out.println("XML 文件結(jié)構(gòu)正確!");
      }
      catch(SAXParseException e){
      //錯(cuò)誤提示,SystemID 為全路徑的文件名
        System.out.println("XML 在第" + 
    e.getLineNumber()+"行出錯(cuò)異常,文件信息:"+e.getSystemId());
        System.out.println("\n"+e.getMessage());
      }
      catch(SAXException ex){
      ex.printStackTrace();
      }
      catch(Throwable th){
      th.printStackTrace();
       }
      }
    }


    運(yùn)行“java IsXMLAvailable People.xml”命令,如程序出錯(cuò),則顯示第幾行有錯(cuò),并給出可能的錯(cuò)誤提示;如程序正確,則顯示 “XML 文件結(jié)構(gòu)正確!”

    建立一個(gè)有效的XML 文檔(DTD)及驗(yàn)證的實(shí)例

    良好的XML 文檔只說(shuō)明了其語(yǔ)法正確,并沒(méi)有解決語(yǔ)義問(wèn)題。XML 描述了有一定含義的數(shù)據(jù),其中可以指定包含數(shù)據(jù)的規(guī)則。通過(guò)這種指定的規(guī)則,可以驗(yàn)證已聲明符合規(guī)則的XML 文檔的有效性,即DTD——文檔類型定義。

    DTD 可以確保應(yīng)用程序接收到一個(gè)有效的XML 文檔,然后可以針對(duì)某一類XML 設(shè)計(jì)出應(yīng)用程序接口。這樣符合某種DTD 的XML 文檔都可以被應(yīng)用程序解析,也可以用DTD 制定自己的文檔規(guī)則,而這個(gè)規(guī)則可被其它應(yīng)用程序利用。DTD 有兩種方法聲明XML文件:

    (1) 外部 DTD 聲明如下:

    <!DOCTYPE peopleinfo SYSTEM "People.dtd">


    (2) 內(nèi)部 DTD 聲明(PeopleDTD.xml)如下:

    <? xml version="1.0" encoding="GB2312"?>
    <! DOCTYPE PeopleInfo[
    <! ELEMENT PeopleInfo(People+)>
     <!ELEMENT People(Peoplename, PeopleSex,PeopleAge)>
       <! ELEMENT PeopleName(#PCDATA)>
       <! ELEMENT PeopleSex(#PCDATA)>
       <! ELEMENT PeopleAge(#PCDATA)>
      <! ATTLIST People PeopleId CDATA #REQUIRED>
     ]>
    <PeopleInfo>
    <People PeopleId="YOUR">
       <PeopleName> 古董 </PeopleName>
       <PeopleSex>   男  </PeopleSex>
       <PeopleAge>   23  </PeopleAge>
    </People>
    <People PeopleId="SHEN">
       <PeopleName> 王冠 </PeopleName>
       <PeopleSex>   女  </PeopleSex>
       <PeopleAge>   25  </PeopleAge> 
     </People>
     </PeopleInfo>


    從上面的文件可以看到內(nèi)嵌的DTD 在<! DOCTYPE> 標(biāo)記中。首先聲明的是XML 文檔的根元素<PeopleInfo>,然后指明在<PeopleInfo>根元素中必須包含有一個(gè)或是多個(gè)的<People>元素(用People+ 表示)。下一句定義了在<People>元素中必須包含<PeopleName>、<PeopleSex>和<PeopleAge>3個(gè)元素。這3個(gè)元素的內(nèi)容類型為#PCDATA,表示內(nèi)容為文本類型。然后是對(duì)屬性的定義,表示PeopleInfo 必須含有PeopleId 屬性。#REQUIRED(必須含有)默認(rèn)的可以省略,CDATA 表示屬性值是字符串型。

    要檢驗(yàn)一個(gè)XML 文件是否有效需要在解析XML 文件時(shí)檢驗(yàn)其是否有效。首先在創(chuàng)建DocumentBuilder 對(duì)象之前,利用語(yǔ)句設(shè)置有效性檢驗(yàn),語(yǔ)句如下:

    dbf.setValidating(true);//設(shè)置對(duì)XML 文件進(jìn)行有效驗(yàn)證


    因?yàn)镾AX 在解析XML 文件時(shí),遇到不符合DTD規(guī)定的地方要觸發(fā)相應(yīng)的事件,所以還要在程序中定義實(shí)現(xiàn)了事件接口的類。在這里用的是常用的處理事件的靜態(tài)內(nèi)部類,在此類中必須實(shí)現(xiàn)的方法語(yǔ)句如下:

    public void warning(SAXParseException spe) throws SAXExcepton
    public void error(SAXParseException spe) throws SAXExcepton
    public void fatalError(SAXParseException spe) throws SAXExcepton


    不同級(jí)別的錯(cuò)誤事件將分別觸發(fā)這3個(gè)方法中的一個(gè)。

    在IsXMLAvailableDTD.java 中,提供了對(duì)XML 文檔進(jìn)行有效性檢驗(yàn)的源程序。從中可以看到SAX事件驅(qū)動(dòng)的解析XML程序的編寫(xiě)方式http:。
    posted on 2006-11-22 17:21 英明 閱讀(224) 評(píng)論(0)  編輯  收藏 所屬分類: 編程

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲婷婷综合色高清在线| 中文字幕亚洲一区二区va在线| 亚洲va国产va天堂va久久| 成人免费网站视频www| 四虎影视永久免费观看网址| 色天使色婷婷在线影院亚洲| 在线观看91精品国产不卡免费| 亚洲日本VA中文字幕久久道具| 日本亚洲视频在线| 丝瓜app免费下载网址进入ios| 亚洲午夜久久久久久久久久| 在线观看黄片免费入口不卡| 国产亚洲A∨片在线观看 | 亚洲av中文无码乱人伦在线r▽| 国产精品一区二区三区免费| 久久亚洲高清观看| 16女性下面无遮挡免费| 亚洲依依成人精品| 国产高清在线精品免费软件 | 国产成人免费A在线视频| 亚洲日韩在线中文字幕综合| 亚洲视频一区二区| 国产偷伦视频免费观看| 亚洲国产中文在线视频| 毛片基地免费观看| 亚洲免费视频在线观看| 在线观看特色大片免费视频| 欧洲亚洲综合一区二区三区| 亚洲精品国产精品乱码视色| 亚洲黄色免费电影| 精品久久久久亚洲| 亚洲国产精品无码久久一区二区| 亚洲美女视频免费| 黄网站色视频免费看无下截 | 亚洲18在线天美| 国产午夜影视大全免费观看| 国产一级婬片A视频免费观看| 亚洲国产女人aaa毛片在线| 成人免费毛片视频| 黄页免费在线观看| 亚洲av成本人无码网站|