中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JDK6.0中StAX是什么

發布時間:2021-12-03 09:37:28 來源:億速云 閱讀:175 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“JDK6.0中StAX是什么”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“JDK6.0中StAX是什么”這篇文章吧。

StAX(JSR 173)是JDK6.0中除了DOM和SAX之外的又一種處理XML文檔的API

StAX的來歷

在JAXP1.3(JSR 206)有兩種處理XML文檔的方法:DOM(Document Object Model)和SAX(Simple API for XML).由于JDK6.0中的JAXB2(JSR 222)和JAX-WS 2.0(JSR 224)都會用到StAX所以Sun決定把StAX加入到JAXP家族當中來,并將JAXP的版本升級到1.4(JAXP1.4是JAXP1.3的維護版本). JDK6里面JAXP的版本就是1.4.

StAX簡介

StAX是The Streaming API for XML的縮寫,一種利用拉模式解析(pull-parsing)XML文檔的API.StAX通過提供一種基于事件迭代器(Iterator)的API讓程序員去控制xml文檔解析過程,程序遍歷這個事件迭代器去處理每一個解析事件,解析事件可以看做是程序拉出來的,也就是程序促使解析器產生一個解析事件然后處理該事件,之后又促使解析器產生下一個解析事件,如此循環直到碰到文檔結束符;SAX也是基于事件處理xml文檔,但卻是用推模式解析,解析器解析完整個xml文檔后,才產生解析事件,然后推給程序去處理這些事件;DOM采用的方式是將整個xml文檔映射到一顆內存樹,這樣就可以很容易地得到父節點和子結點以及兄弟節點的數據,但如果文檔很大,將會嚴重影響性能。下面是這幾種API的比較(轉載自http://www.blogjava.net/hsith/archive/2006/06/29/55817.html)

XML Parser API Feature Summary

Feature

StAX

SAX

DOM

TrAX

API Type

Pull, streaming

Push, streaming

In memory tree

XSLT Rule

Ease of Use

High

Medium

High

Medium

XPath Capability

No

No

Yes

Yes

CPU and Memory Efficiency

Good

Good

Varies

Varies

Forward Only

Yes

Yes

No

No

Read XML

Yes

Yes

Yes

Yes

Write XML

Yes

No

Yes

Yes

Create, Read, Update, Delete

No

No

Yes

No

StAX代碼演示

下面代碼演示了如何通過StAX讀取xml文檔和生成xml文檔

public class StaxTester {
   public static void main(String[] args) throws XMLStreamException, FileNotFoundException {
       readXMLByStAX();//用XMLEventReader解析xml文檔
       writeXMLByStAX();//用XMLStreamWriter寫xml文檔
   }

   private static void readXMLByStAX() throws XMLStreamException, FileNotFoundException {
       XMLInputFactory xmlif = XMLInputFactory.newInstance();
       XMLEventReader xmler = xmlif.createXMLEventReader(StaxTester.class.getResourceAsStream("test.xml"));
       XMLEvent event;
       StringBuffer parsingResult = new StringBuffer();
       while (xmler.hasNext()) {
           event = xmler.nextEvent();            
           if (event.isStartElement()) { //如果解析的是起始標記                StartElement se = event.asStartElement();
               parsingResult.append("<");
               parsingResult.append(se.getName());
               if(se.getName().getLocalPart().equals("catalog")) {
                   parsingResult.append(" id="");
                   parsingResult.append(se.getAttributeByName(new QName("id")).getValue());
                   parsingResult.append(""");
               }
               parsingResult.append(">");
           } else if (event.isCharacters()) { //如果解析的是文本內容
               parsingResult.append(event.asCharacters().getData());
           } else if(event.isEndElement()){ //如果解析的是結束標記
               parsingResult.append("                parsingResult.append(event.asEndElement().getName());
               parsingResult.append(">");
           }
       }
       System.out.println(parsingResult);
   }

   private static void writeXMLByStAX() throws XMLStreamException, FileNotFoundException {
       XMLOutputFactory xmlof = XMLOutputFactory.newInstance();
       XMLStreamWriter xmlw = xmlof.createXMLStreamWriter(new FileOutputStream("output.xml"));

       // 寫入默認的 XML 聲明到xml文檔
       xmlw.writeStartDocument();
       xmlw.writeCharacters("n");
       // 寫入注釋到xml文檔
       xmlw.writeComment("testing comment");
       xmlw.writeCharacters("n");
       // 寫入一個catalogs根元素        xmlw.writeStartElement("catalogs");
       xmlw.writeNamespace("myNS", "
");
       xmlw.writeAttribute("owner","Chinajash");
       xmlw.writeCharacters("n");
       // 寫入子元素catalog
       xmlw.writeStartElement("
", "catalog");
       xmlw.writeAttribute("id","007");
       xmlw.writeCharacters("Apparel");
       // 寫入catalog元素的結束標簽
       xmlw.writeEndElement();
       // 寫入catalogs元素的結束標簽
       xmlw.writeEndElement();
       // 結束 XML 文檔        xmlw.writeEndDocument();        
       xmlw.close();
   }
}
http://blog.csdn.net/Chinajashhttp://blog.csdn.net/Chinajash

test.xml文件內容如下:



   Book
   Video

運行上面程序后,控制臺輸出如下:


   Book
   Video

運行上面程序后,產生的output.xml文件如下:


<!-- testing comment--&gt

   Apparel

以上是“JDK6.0中StAX是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

剑河县| 乐安县| 五家渠市| 海口市| 天等县| 壶关县| 承德市| 启东市| 桃园市| 城口县| 宜城市| 兴国县| 石景山区| 阳春市| 文成县| 长白| 册亨县| 宁海县| 保德县| 茌平县| 静海县| 德庆县| 洛宁县| 镇坪县| 蒙阴县| 聂荣县| 永福县| 紫金县| 余干县| 屯门区| 柘荣县| 富锦市| 丹阳市| 宁河县| 平乐县| 岐山县| 稻城县| 台州市| 台前县| 天祝| 龙岩市|