麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > XML > 正文

解析xml的處理以及其他

2024-09-05 20:54:52
字體:
供稿:網(wǎng)友
dom和SAX使兩種主流的選擇,還有JDOM,DOM4J做的不錯(cuò)。

  DOM解析器把XML文檔轉(zhuǎn)化為一個(gè)包含其內(nèi)容的樹,并可以對樹進(jìn)行遍歷。用DOM解析模型的優(yōu)點(diǎn)是編程容易,開發(fā)人員只需要調(diào)用建樹的指令,然后利用navigation APIs訪問所需的樹節(jié)點(diǎn)來完成任務(wù)。可以很容易的添加和修改樹中的元素。然而由于使用DOM解析器的時(shí)候需要處理整個(gè)XML文檔,所以對性能和內(nèi)存的要求比較高,尤其是遇到很大的XML文件的時(shí)候。由于它的遍歷能力,DOM解析器常用于XML文檔需要頻繁的改變的服務(wù)中。

例: import java.io.*;import java.util.*;import org.w3c.dom.*;import javax.xml.parsers.*;

  public class MyXMLReader{

  public static void main(String arge[]){

  long lasting =System.currentTimeMillis();

  try{

   File f=new File("data_10k.xml");

   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

   DocumentBuilder builder=factory.newDocumentBuilder();

   Document doc = builder.parse(f);

   NodeList nl = doc.getElementsByTagName("VALUE");

   for (int i=0;i<nl.getLength();i++){

    System.out.print("車牌號(hào)碼:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());

    System.out.println("車主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());

  }

  }catch(Exception e){

   e.printStackTrace();

  }

  SAX解析器采用了基于事件的模型,它在解析XML文檔的時(shí)候可以觸發(fā)一系列的事件,當(dāng)發(fā)現(xiàn)給定的tag的時(shí)候,它可以激活一個(gè)回調(diào)方法,告訴該方法制定的標(biāo)簽已經(jīng)找到。SAX對內(nèi)存的要求通常會(huì)比較低,因?yàn)樗岄_發(fā)人員自己來決定所要處理的tag。特別是當(dāng)開發(fā)人員只需要處理文檔中所包含的部分?jǐn)?shù)據(jù)時(shí),SAX這種擴(kuò)展能力得到了更好的體現(xiàn)。但用SAX解析器的時(shí)候編碼工作會(huì)比較困難,而且很難同時(shí)訪問同一個(gè)文檔中的多處不同數(shù)據(jù)。

例: import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;

  public class MyXMLReader extends DefaultHandler {

  java.util.Stack tags = new java.util.Stack();

  public MyXMLReader() {

  super();}

  public static void main(String args[]) {

  long lasting = System.currentTimeMillis();

  try {

   SAXParserFactory sf = SAXParserFactory.newInstance();

   SAXParser sp = sf.newSAXParser();

   MyXMLReader reader = new MyXMLReader();

   sp.parse(new InputSource("data_10k.xml"), reader);

  } catch (Exception e) {

   e.printStackTrace();

  }

  System.out.println("運(yùn)行時(shí)間:" + (System.currentTimeMillis() - lasting) + "毫秒");}

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

  String tag = (String) tags.peek();

  if (tag.equals("NO")) {

   System.out.print("車牌號(hào)碼:" + new String(ch, start, length));}if (tag.equals("ADDR")) {

  System.out.println("地址:" + new String(ch, start, length));}}

  public void startElement(String uri,String localName,String qName,Attributes attrs) {

  tags.push(qName);}}

  注意:當(dāng)xml數(shù)據(jù)的形式作為傳遞時(shí),要獲取一條條的紀(jì)錄是比較適宜于采用dom,雖然它對系統(tǒng)(內(nèi)存,性能等)有較高的要求,但是一般的服務(wù)器都可滿足上G的xml文檔的處理。

當(dāng)需要對xml的某些內(nèi)容或某些節(jié)點(diǎn)的特定訪問時(shí),或需要一及時(shí)地事件相應(yīng)時(shí),可以用sax來處理。它是基于時(shí)間處理機(jī)制的,在編程時(shí),通過重載一些事件方法,來獲得對xml文檔的處理。

  有關(guān)xml的編碼,InputStreamReader和xmlReader的關(guān)系:

   通常的DOM和SAX對于用ascii編碼的文檔,通過用InputStreamReader讀入xml文檔,后變成了unicode碼,然后不能用 XMlREader來處理,出現(xiàn)錯(cuò)誤的原因是:遇到無效的unicode的字符。(當(dāng)你用system.out.println()輸出是沒有任何問題,因?yàn)樗茏詣?dòng)轉(zhuǎn)成本地機(jī)的編碼)。

解決的方法:

BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f),"ISO8859-1"));

這樣就可以限定它的編碼,這樣就沒有問題。

  String 的長度問題:String 類型安標(biāo)準(zhǔn)來說沒有長度限制,但是一般jdk中String的最大長度是4G。

  String與BufferedString關(guān)系:在不涉及到字符串有效的大量處理,通常使用String. BufferedString在處理字符串的大量處理上有優(yōu)勢

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品999在线 | 毛片免费在线观看视频 | 欧美一极视频 | 欧美成人三级视频 | 久久一区二区三区av | 99国内精品 | 亚洲小视频在线 | 国产毛片aaa一区二区三区视频 | 久久国产精品久久久久久 | 日韩视频一区二区三区四区 | 国产亚洲精品久久久闺蜜 | 宅男噜噜噜66一区二区 | 久色视频网站 | 国产精品啪一品二区三区粉嫩 | 91精品国产乱码久久桃 | 一区二区三区欧美在线 | 色网在线视频 | 69性欧美高清影院 | 久久精品一区二区三区不卡牛牛 | 久久精品久久久久 | 亚洲天堂成人在线 | 噜噜噜在线 | 国产做爰全免费的视频黑人 | 国产精品久久久久av | 国产成人精品区 | 黄色网址在线免费播放 | 伊久在线 | www.91在线| 国内精品视频饥渴少妇在线播放 | 国产三级三级三级三级 | 色av综合在线 | 精品久久久久久成人av | 九一免费版在线观看 | 高潮激情aaaaa免费看 | 经典三级在线视频 | 久久久裸体视频 | 成年人免费视频大全 | 亚洲日韩中文字幕一区 | 天天夜天天操 | 日本看片一区二区三区高清 | 久久久久久高清 |