国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Java語言編程中更新XML文檔的常用方法集

2019-11-18 10:48:29
字體:
供稿:網(wǎng)友

  本文簡要的討論了java語言編程中更新xml文檔的四種常用方法,并且分析這四種方法的優(yōu)劣。其次,本文還對(duì)如何控制Java程序輸出的XML文檔的格式做了展開論述。
  
  JAXP是Java API for XML PRocessing的英文字頭縮寫,中文含義是:用于XML文檔處理的使用Java語言編寫的編程接口。JAXP支持DOM、SAX、XSLT等標(biāo)準(zhǔn)。為了增強(qiáng)JAXP使用上的靈活性,開發(fā)者非凡為JAXP設(shè)計(jì)了一個(gè)Pluggability Layer,在Pluggability Layer的支持之下,JAXP既可以和具體實(shí)現(xiàn)DOM API、SAX API 的各種XML解析器(XML Parser,例如Apache Xerces)聯(lián)合工作,又可以和具體執(zhí)行XSLT標(biāo)準(zhǔn)的XSLT處理器(XSLT Processor,例如Apache Xalan)聯(lián)合工作。
  
  應(yīng)用Pluggability Layer的好處在于:我們只需要熟悉JAXP各個(gè)編程接口的定義即可,而不需要對(duì)所采用的具體的XML解析器、XSLT處理器有很深入的了解。比如在某個(gè)Java程序中,通過JAXP調(diào)用XML解析器Apache Crimson對(duì)XML文檔進(jìn)行處理,假如我們希望使用別的XML解析器(比如Apache Xerces),以便提高該程序的性能,那么原程序代碼可能不需要任何改變,直接就可以使用(你所需要做的事情只是將包含Apache Xerces代碼的jar文件加入到環(huán)境變量CLASSPATH中,而將包含Apache Crimson代碼的jar文件在環(huán)境變量CLASSPATH中刪除)。
  
  目前JAXP已經(jīng)應(yīng)用的十分普遍了,可以說是Java語言中處理XML文檔的標(biāo)準(zhǔn)API。有些初學(xué)者在學(xué)習(xí)使用JAXP的過程中,經(jīng)常會(huì)提出這樣的問題:我編寫的程序?qū)OM Tree做了更新,但是當(dāng)程序退出以后,原始的XML文檔并沒有改變,還是老樣子,如何實(shí)現(xiàn)對(duì)原始XML文檔和DOM Tree的同步更新呢?咋一看來,在JAXP中似乎沒有提供相應(yīng)的接口/方法/類,這是很多初學(xué)者都感到困惑的問題。本文的主旨就在于解決這個(gè)問題,簡單的介紹幾種常用的同步更新原始XML文檔和DOM Tree的方法。為了縮小討論的范圍,本文所涉及的XML解析器僅包括Apache Crimson和Apache Xerces,而XSLT處理器僅僅使用Apache Xalan。
  
  方法一:直接讀寫XML文檔
  
  這也許是最笨最原始的辦法了。當(dāng)程序獲取DOM Tree之后,應(yīng)用DOM模型的Node接口的各個(gè)方法對(duì)DOM Tree進(jìn)行更新,下一步應(yīng)該對(duì)原始的XML文檔進(jìn)行更新了。我們可以運(yùn)用遞歸的辦法或者是應(yīng)用TreeWalker類,遍歷整個(gè)DOM Tree,與此同時(shí),將DOM Tree的每一個(gè)節(jié)點(diǎn)/元素依次寫入到預(yù)先打開的原始XML文檔中,當(dāng)DOM Tree被遍歷完全之后,DOM Tree和原始的XML文檔就實(shí)現(xiàn)了同步更新。實(shí)際中,這個(gè)方法極少使用,不過假如你要編程實(shí)現(xiàn)自己的XML解析器,這種方法還是有可能用得上的。
  
  方法二:使用XmlDocument類
  
  使用XmlDocument類?JAXP中分明沒有這個(gè)類呀!是不是作者搞錯(cuò)了?沒有錯(cuò)!就是使用XmlDocument類,確切的說,是使用XmlDocument類的write()方法。
  
  在上文已經(jīng)提到過,JAXP可以和各種各樣的XML解析器聯(lián)合使用,這次我們選用的XML解析器是Apache Crimson。XmlDocument(org.apache.crimson.tree.XmlDocument)是Apache Crimson的一個(gè)類,并不包含于標(biāo)準(zhǔn)的JAXP中,難怪在JAXP的文檔中找不到XmlDocument類的芳蹤呢。現(xiàn)在問題出來了,如何應(yīng)用XmlDocument類來實(shí)現(xiàn)更新XML文檔的功能?在XmlDocument類中提供了下面三個(gè)write()方法(根據(jù)Crimson最新的版本------Apache Crimson 1.1.3):
  
  public void write (OutputStream out) throws IOException
  public void write (Writer out) throws IOException
  public void write (Writer out, String encoding) throws IOException
  
  上述三個(gè)write()方法的主要作用就是輸出DOM Tree中的內(nèi)容到特定的輸出介質(zhì)中,比如文件輸出流、應(yīng)用程序控制臺(tái)等等。那么又如何使用上述三個(gè)write()方法呢?請(qǐng)看下面的Java程序代碼片斷:
  
  String name="fancy";
  DocumentBuilder parser;
  DocumentBuilderFactory factory =
  DocumentBuilderFactory.newInstance();
  try
  {
  parser = factory.newDocumentBuilder();
  Document doc = parser.parse("user.xml");
  Element newlink=doc.createElement(name);
  doc.getDocumentElement().appendChild(newlink);
  ((XmlDocument)doc).write(new FileOutputStream
  (new File("xuser1.xml")));
  }
  catch (Exception e)
  {
  //to log it
  }
  
  在上面的代碼中,首先創(chuàng)建了一個(gè)Document對(duì)象doc,獲取完整的DOM Tree,然后應(yīng)用Node接口的appendChild()方法,在DOM Tree的最后追加了一個(gè)新節(jié)點(diǎn)(fancy),最后調(diào)用XmlDocument類的write(OutputStream out)方法,把DOM Tree中的內(nèi)容輸出到xuser.xml中(其實(shí)也可以輸出到user.xml,更新原始的XML文檔,在這里為了便于做對(duì)比,故而輸出到xuser.xml文件中)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 榆中县| 二连浩特市| 芜湖县| 迭部县| 定远县| 香港 | 仁怀市| 武清区| 三亚市| 环江| 武鸣县| 武威市| 三都| 桃源县| 吉林省| 威海市| 衡阳市| 姜堰市| 威海市| 江安县| 凤凰县| 时尚| 阿合奇县| 牡丹江市| 新乡市| 桦甸市| 正宁县| 南投县| 鹤岗市| 崇文区| 峨眉山市| 铜鼓县| 贵溪市| 永康市| 枞阳县| 黔南| 兴安盟| 清镇市| 易门县| 静宁县| 吉水县|