在1998年W3Cxml1.0推薦標準發布之后,XML就開始變得很流行。Sun公司就是在那時候規范java Community PRocess (JCP),同時JAXP(JSR-05)的第一版在2000早些時候發布了。這個版本得到了很多工業集團的支持,譬如(以年月次序排列)BEA Systems, Fujitsu Limited, Hewlett-Packard, IBM, Netscape Communications, Oracle, and Sun Microsystems, Inc.
JAXP (全稱Java API for XML Parsing)的可插拔性(pluggability)在開發社區里引起很大的轟動。這點也是JAXP的精華所在。開發人員可以編寫自己的xml處理器,只要它符合JAXP的APIs,這樣底層不同的xml處理器可以任意切換而不用改應用程序的代碼。
那JAXP到底是什么呢?首先 這個P有點迷惑,它代表Parsing還是Processing呢?
因為JAXP1.0的時候只支持解析(parsing),所以JAXP全稱應該是Java API for XML Parsing.
但在JAXP1.1的時候,XSL-T被推薦用作XML的轉換(transformation)處理。很遺憾,當時W3C XLT-T的標準規范(specification)里沒有提供任何用來轉換(transformation)處理的APIs。因此JAXP1.1的專家組推薦了一組APIs叫Transformation API for XML (TrAX)。
從此JAXP就叫Java API for XML Processing. JAXP通過逐步進化,支持的東西也越來越多
JAXP支持基于對象和基于事件的兩種解析方式?;趯ο蟮慕馕?,到目前為止只支持W3C DOM解析,JAXP的專家組可能在JAXP的將來版本中會支持J-DOM規范?;谑录慕馕?,只有SAX 解析模式被支持,另一個基于事件的解析模式叫Pull Parsing,本來它應該是JAXP的一部分。但是對于Pull Parsing存在有一份不同的JSR (#173)文檔,也就是大家所知道的Streaming API for XML (StAX) parsing,現在我們對于那個也沒什么更多的可以做了。
SAXParserFactory spfactory = SAXParserFactory.newInstance(); spfactory.setNamespaceAware(true); SAXParser saxparser = spfactory.newSAXParser(); //write your handler for processing events and handling error DefaultHandler handler = new MyHandler(); //parse the XML and report events and errors (if any) to the handler saxparser.parse(new File("data.xml"), handler);
文檔對象模型解析
DOM 解析是基于對象的原理,當用DOM解析XML文檔時它會在內存中生成一個樹形的結構來表示一個XML文檔。