程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java編程中更新XML文檔的常用方法

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

編輯:關於JAVA

本文簡要的討論了Java語言編程中更新XML文檔的四種常用方法,並且分析這四種方法的優劣。其次,本文還對如何控制Java程序輸出的XML文檔的格式做了展開論述。

  JAXP是Java API for XML Processing的英文字頭縮寫,中文含義是:用於XML文檔處理的使用Java語言編寫的編程接口。JAXP支持DOM、SAX、XSLT等標准。為了增強JAXP使用上的靈活性,開發者特別為JAXP設計了一個Pluggability Layer,在Pluggability Layer的支持之下,JAXP既可以和具體實現DOM API、SAX API 的各種XML解析器(XML Parser,例如Apache Xerces)聯合工作,又可以和具體執行XSLT標准的XSLT處理器(XSLT Processor,例如apache Xalan)聯合工作。應用Pluggability Layer的好處在於:我們只需要熟悉JAXP各個編程接口的定義即可,而不需要對所采用的具體的XML解析器、XSLT處理器有很深入的了解。比如在某個Java程序中,通過JAXP調用XML解析器apache Crimson對XML文檔進行處理,如果我們希望使用別的XML解析器(比如Apache Xerces),以便提高該程序的性能,那麼原程序代碼可能不需要任何改變,直接就可以使用(你所需要做的事情只是將包含Apache Xerces代碼的jar文件加入到環境變量CLASSPATH中,而將包含apache Crimson代碼的jar文件在環境變量CLASSPATH中刪除)。 

  目前JAXP已經應用的十分普遍了,可以說是Java語言中處理XML文檔的標准API。有些初學者在學習使用JAXP的過程中,經常會提出這樣的問題:我編寫的程序對DOM Tree做了更新,但是當程序退出以後,原始的XML文檔並沒有改變,還是老樣子,如何實現對原始XML文檔和DOM Tree的同步更新呢?咋一看來,在JAXP中似乎沒有提供相應的接口/方法/類,這是很多初學者都感到困惑的問題。本文的主旨就在於解決這個問題,簡單的介紹幾種常用的同步更新原始XML文檔和DOM Tree的方法。為了縮小討論的范圍,本文所涉及的XML解析器僅包括Apache Crimson和Apache Xerces,而XSLT處理器僅僅使用apache Xalan。 

  方法一:直接讀寫XML文檔 

  這也許是最笨最原始的辦法了。當程序獲取DOM Tree之後,應用DOM模型的Node接口的各個方法對DOM Tree進行更新,下一步應該對原始的XML文檔進行更新了。我們可以運用遞歸的辦法或者是應用TreeWalker類,遍歷整個DOM Tree,與此同時,將DOM Tree的每一個節點/元素依次寫入到預先打開的原始XML文檔中,當DOM Tree被遍歷完全之後,DOM Tree和原始的XML文檔就實現了同步更新。實際中,這個方法極少使用,不過如果你要編程實現自己的XML解析器,這種方法還是有可能用得上的。 

  方法二:使用XMLDocument類 

  使用XmlDocument類?JAXP中分明沒有這個類呀!是不是作者搞錯了?沒有錯!就是使用XmlDocument類,確切的說,是使用XMLDocument類的write()方法。 

  在上文已經提到過,JAXP可以和各種各樣的XML解析器聯合使用,這次我們選用的XML解析器是Apache Crimson。XmlDocument(org.apache.crimson.tree.XmlDocument)是apache Crimson的一個類,並不包含於標准的JAXP中,難怪在JAXP的文檔中找不到XmlDocument類的芳蹤呢。現在問題出來了,如何應用XmlDocument類來實現更新XML文檔的功能?在XMLDocument類中提供了下面三個write()方法(根據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
  上述三個write()方法的主要作用就是輸出DOM Tree中的內容到特定的輸出介質中,比如文件輸出流、應用程序控制台等等。那麼又如何使用上述三個write()方法呢?請看下面的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 
}


  在上面的代碼中,首先創建了一個Document對象doc,獲取完整的DOM Tree,然後應用Node接口的appendChild()方法,在DOM Tree的最後追加了一個新節點(fancy),最後調用XmlDocument類的write(OutputStream out)方法,把DOM Tree中的內容輸出到xuser.XML中(其實也

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved