ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>午夜精品久久17c,中文在线资源在线,国产精品久久久久免费a∨大胸 http://www.aygfsteel.com/lukangping/category/45885.html¿U¯ç¯ã€‚。。沉淀(w¨§n)。。ã€?/description>zh-cnWed, 01 Jun 2011 21:47:26 GMTWed, 01 Jun 2011 21:47:26 GMT60java xml 解析方式汇æ€?åQˆä¸€åQ‰ï¼ƒé«˜çñ”½E‹åºå‘˜è¿›é˜¶ä¹‹è·¯ï¼ƒhttp://www.aygfsteel.com/lukangping/articles/350762.htmlkangarookangarooSun, 22 May 2011 03:25:00 GMThttp://www.aygfsteel.com/lukangping/articles/350762.htmlhttp://www.aygfsteel.com/lukangping/comments/350762.htmlhttp://www.aygfsteel.com/lukangping/articles/350762.html#Feedback0http://www.aygfsteel.com/lukangping/comments/commentRss/350762.htmlhttp://www.aygfsteel.com/lukangping/services/trackbacks/350762.html

1。xml背景

格式良好的(web-fromedåQ‰xml可以不需要文档类型定义(DTDåQ‰ï¼Œåªè¦æ»¡èƒö基本的xml格式规范?y¨­u)®±å¯ä»¥è®¤ä¸ºæ˜¯æ ¼å¼è‰¯å¥½çš„xml文档。但是格式标准,只能说明元素、标½{¾ã€æ ¼å¼æ˜¯åˆæ³•的,òq¶ä¸èƒ½è¯´æ˜Žå…ƒç´ æ˜¯æœ‰æ„ä¹‰çš„åQŒæˆ–者说规范的ã€?/p>

有效的xml文档åQŒé¦–先要求是格式良好的文档,同时遵守相应的DTDæ–‡äšg¾U¦æŸã€?/p>

2。xml解析

xml文档解析的大致ä‹É用过½E‹å¦‚下图åQ?/p>

 

 

 

ç”±xml解析器解析和操作指定的xml文档åQŒç„¶åŽæä¾›æŽ¥å£ä¾›åº”用½E‹åºä½¿ç”¨ã€‚如果解析器不同åQŒé‚£ä¹ˆæä¾›çš„æŽ¥å£ž®±æœ‰å¯èƒ½ä¸åŒã€‚庆(ji¨£n)òq¸çš„æ˜¯ï¼Œç›®å‰æ‰€æœ‰çš„xml解析器对两套标准的api提供äº?ji¨£n)支持,˜q™ä¸¤å¥—标准apiž®±æ˜¯domå’Œsaxã€?/p>

domåQšå³document object modelåQŒæ–‡æ¡£å¯¹è±¡æ¨¡åž‹ï¼Œå®ƒæ˜¯w3c¾l„织推荐的处理xml的标准接口。dom是基于xml文档¾l“æž„æ ?w¨¨i)的解析ã€?/p>

saxåQšå³simple api for xmlåQŒå®ƒæ˜¯éžå®˜æ–¹çš„、xml½C‘ÖŒºäº‹å®žä¸Šçš„æ ‡å‡†ã€‚sax是基于事件流的解析ã€?/p>

domå’Œsax只是定义äº?ji¨£n)一些接口以å?qi¨¢ng)某些接口的¾~ºçœå®žçްåQŒåº”用程序要惛_ˆ©ç”¨dom或sax讉K—®xml文档åQŒè¿˜éœ€è¦çœŸæ­£å®žçްdom或sax接口的xml解析器。apacheçš„xerces是一个ä‹É用非常广泛的解析器,它实çŽîCº†(ji¨£n)domå’Œsax的调用接口,òq¶æä¾›äº†(ji¨£n)多种语言的实现版本ã€?/p>

3。java语言对xml文档的解æž?/p>

首先介绍jaxpåQ?/p>

åŸÞZºŽdom或sax提供的api接口åQŒä‹É用相应的解析器实现类我们已经可以对xml˜q›è¡Œè§£æžå¤„理äº?ji¨£n)。如下所½Cºï¼š(x¨¬)

org.xml.sax.XMLReader sp=new org.apache.xerces.parser.SAXParser();

FileInputStream fis=new FileInputStream(“hello.xml”);

InputSource is=new InputSource(fis);

sp.setContentHandler(new MyConentHandler());

sp.parse(is);

ä¸ÞZº†(ji¨£n)屏蔽xml解析器的变化对代码的影响åQŒjava提供äº?ji¨£n)一套标准的处理xmlæ–‡äšg的接口(实际上是一些抽象的工厂¾c»ï¼‰(j¨ª)åQŒä‹Éå¾—java开发äh员ä(sh¨´)»¥ä¸€¿Uæ ‡å‡†çš„æ–¹å¼å¯¹xml˜q›è¡Œ¾~–程åQŒå³jaxpåQˆjava api for xml processingåQ‰ã€‚jaxp没有提供解析xml的新æ–ÒŽ(gu¨©)³•åQŒåªæ˜¯åœ¨è§£æžå™¨ä¹‹ä¸Šå°è£…一个抽象层。在jdk1.6的文档中åQŒæˆ‘们可以看到javax.xml,org.w3c.dom,org.xml.sax包及(qi¨¢ng)其子包都属于jaxp的部分。jaxp由接口、抽象类和一些辅助类¾l„成åQŒç¬¦åˆjaxp规范的解析器实现其中的接口和抽象¾c»ï¼Œå¼€å‘时只需要ä‹É用jaxpçš„api¾~–程åQŒåº•层的解析器对开发者时透明的,可以随意的切换ã€?/p>

那么jaxp出现后,java应用½E‹åºå¤„理xml文档的过½E‹å°±å¦‚下图:(x¨¬)

 

那实际采用哪¿Uè§£æžå™¨çš„jaxp实现åQŒå¯ä»¥é€šè¿‡¾pȝ»Ÿå±žæ€§ã€propertiesæ–‡äšg½{‰æ–¹å¼æ¥é…ç½®ã€?/p>

下面具体介绍几种java解析xml的方法:(x¨¬)

3.1 DOM方式åQˆjaxpåQ?/p>

在javax.xml.parsers包中åQŒå®šä¹‰äº†(ji¨£n)dom的抽象工厂类DocumentBuilderFactoryåQŒåœ¨˜q™ä¸ª¾cÖM¸­æœ‰ä¸€ä¸ªé™(r¨´n)态的æ–ÒŽ(gu¨©)³•newInstance()åQŒé€šè¿‡å®ƒäñ”生一个DocumentBuilderFactory的实例。前面提到过jaxp¾~–程åQŒè§£æžå™¨æä¾›å•†å¿…™åȝ‘ô承该抽象¾cÖMñ”生一个具体的解析器工厂,然后ç”Þp¿™ä¸ªå·¥åŽ‚ç±»å®žä¾‹å‡ÞZ¸€ä¸ªè§£æžå™¨å¯¹è±¡åQŒå†é€šè¿‡è¯¥è§£æžå™¨å¯¹è±¡å¤„理xml文档。那么这个newInstanceæ–ÒŽ(gu¨©)³•ž®±æ˜¯ç”¨æ¥äº§ç”Ÿä¸€ä¸ªå…·ä½“的解析器工厂类实例åQŒæŸ¥æ‰„¡”Ÿæˆè§£æžå™¨å·¥åŽ‚¾cÕd®žä¾‹çš„æ–¹å¼å¯å‚考jdk文档ã€?/p>

在获取到解析器工厂类实例¾cÖM¹‹åŽï¼Œž®±å¯ä»¥è°ƒç”¨newDocumentBuilder()æ–ÒŽ(gu¨©)³•创徏一个dom解析器实例;dom解析器实例就可以调用parser()æ–ÒŽ(gu¨©)³•获取整个xml问答的Document对象ã€?/p>

3 .2 SAX方式åQˆjaxpåQ?/p>

sax是基于事仉™©±åŠ¨çš„apiåQŒsax解析xml文档时会(x¨¬)向事件处理器发送不同的事äšg。sax解析器接口和事äšg处理器接口都在org.xml.sax包中定义。XMLReaderå³äØ“(f¨´)sax定义的解析器接口åQŒç”±è§£æžå™¨æä¾›å•†å®žçŽ°è¯¥å€Ÿå£åQŒåº”用程序需要做的是¾~–写一个事件处理器。可以通过XMLReaderçš„setContentHandler()æ–ÒŽ(gu¨©)³•来设¾|®ä¸€ä¸ªäº‹ä»¶å¤„理器的实例ã€?/p>

与dom¾cÖM¼¼åQŒjaxpä¹ŸäØ“(f¨´)sax解析器提供了(ji¨£n)抽象工厂¾c»SAXParserFactory¾c»ï¼Œsax解析器工厂类的实例与dom解析器工厂类的实例类ä¼û|¼Œéƒ½æ˜¯é€šè¿‡newInstance()æ–ÒŽ(gu¨©)³•来创建,不同的是SAXParserFactoryçš„newInstance()æ–ÒŽ(gu¨©)³•查找的工厂类属性是åQšjavax.xml.parsers.SAXParserFactoryã€‚åŒæ øP¼ŒèŽ·å–sax解析器实例的æ–ÒŽ(gu¨©)³•åQŒå¯ä»¥é€šè¿‡è°ƒç”¨newSAXParser()ã€?/p>

使用SAXParserå’ŒXMLReader都可以用来对xml文档˜q›è¡Œè§£æžåQŒå‰è€…只是对后者又一‹Æ¡çš„包装ã€?/p>

3.3 JDOM

dom被设计用于完成几乎所有的xml操作ä»ÕdŠ¡åQŒåŒæ—¶åˆæ˜¯ä¸Žè¯­è¨€æ— å…³çš„,˜q™å°±å¯ÆD‡´domçš„apiåºžå¤§è€Œä¸”å¤æ‚ã€‚äØ“(f¨´)äº?ji¨£n)ä‹Éjava½E‹åºå‘˜æ›´æ–¹ä¾¿åœ°å¤„理xml文档åQŒä¸¤ä½å›½å¤–çš„java技术专家创å»ÞZº†(ji¨£n)jdom。用developerworks上的一句话åQ?#8220;延箋(hu¨¤)开源社¾Ÿ¤æœ‰éœ€è¦å°±åˆ›å¾å·¥å…·çš„历史传¾lŸï¼ŒJava 技术专å®?Jason Hunter å’?Brett McLaughlin ¾~”造了(ji¨£n) JDOM”。所以可以认为,jdom是一¿Uä¸“门用于java语言解析xml文档的开放源代码框架ã€?/p>

jdom也ä‹É用对象树(w¨¨i)来表½Cºxml文档åQŒåº•层ä‹É用sax解析器分析xml文档åQŒåŞ成jdomæ ?w¨¨i)ã€?/p>

3.4 DOM4J

同jdomä¸€æ øP¼Œdom4j也是应用于javaòq›_°åQŒæä¾›ç®€å•、灵‹zȝš„处理xml文档的开发源代码库。很有意思的是,dom4j是由早期开发jdomçš„äh分离出来而后独立开发的åQŒï¼ˆåˆ©ç›Šæˆ–意见不和?呵呵åQ‰ä¸Žjdom相比åQŒdom4j提供äº?ji¨£n)更好的灉|´»æ€§ã€‚从¾|‘上的评论可以看出,dom4j从性能、功能、易用性上都优?sh¨´)ºŽjdomåQŒå¯ä»¥ä½œä¸ø™§£æžxmlæ–‡äšg的首选。(看来后来分离出的那拨人选择˜q˜æ˜¯æ­£ç¡®çš„!åQ‰æµè¡Œçš„hibernateåQŒjaxm都采用了(ji¨£n)dom4j处理xmlæ–‡äšgã€?/p>

dom4j也ä‹É用sax解析器来分析xml文档åQŒåŞ成dom4jæ ?w¨¨i);它也提供了(ji¨£n)用于大文档的基于事件的处理模型ã€?/p>

所以可以看出,jdomå’Œdom4j只是开源社åŒÞZñ”生出来的方便地解析xml的框架或工具åQŒåƈ没有创造新的xml解析方式。如果拿

拿以上四¿Uè§£æžxml的方法比较,用孙鑫老师的话åQŒå¦‚果你需要频¾Jæ›´æ¢è§£æžå™¨ž®±æ˜¯jaxp方式åQŒå¦åˆ™æŽ¨èä‹É用dom4jã€?/p>

]]>
持箋(hu¨¤)记录--java¾~–码ž®æŠ€å·?/title><link>http://www.aygfsteel.com/lukangping/articles/328167.html</link><dc:creator>kangaroo</dc:creator><author>kangaroo</author><pubDate>Fri, 06 Aug 2010 11:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/lukangping/articles/328167.html</guid><wfw:comment>http://www.aygfsteel.com/lukangping/comments/328167.html</wfw:comment><comments>http://www.aygfsteel.com/lukangping/articles/328167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lukangping/comments/commentRss/328167.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lukangping/services/trackbacks/328167.html</trackback:ping><description><![CDATA[持箋(hu¨¤)记录下自己遇到的java¾~–码技巧:(x¨¬)<br /> <br /> 1. java.util.List.<strong>addAll</strong>(Collection<? extends String> c) <br /> <br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_39_370_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_370_Open_Text.style.display='none'; Codehighlighter1_39_370_Closed_Image.style.display='inline'; Codehighlighter1_39_370_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_39_370_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_39_370_Closed_Text.style.display='none'; Codehighlighter1_39_370_Open_Image.style.display='inline'; Codehighlighter1_39_370_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) </span><span id="Codehighlighter1_39_370_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_39_370_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        List</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000"> firstList </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ArrayList</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000">();<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        firstList.add(</span><span style="color: #000000">"</span><span style="color: #000000">a</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        firstList.add(</span><span style="color: #000000">"</span><span style="color: #000000">b</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        firstList.add(</span><span style="color: #000000">"</span><span style="color: #000000">c</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        List</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000"> secondList </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ArrayList</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000">();<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        secondList.addAll(firstList);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_319_364_Open_Image" onclick="this.style.display='none'; Codehighlighter1_319_364_Open_Text.style.display='none'; Codehighlighter1_319_364_Closed_Image.style.display='inline'; Codehighlighter1_319_364_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_319_364_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_319_364_Closed_Text.style.display='none'; Codehighlighter1_319_364_Open_Image.style.display='inline'; Codehighlighter1_319_364_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="color: #0000ff">for</span><span style="color: #000000"> (String s : secondList) </span><span id="Codehighlighter1_319_364_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_319_364_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(s);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span></div> <img src ="http://www.aygfsteel.com/lukangping/aggbug/328167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lukangping/" target="_blank">kangaroo</a> 2010-08-06 19:15 <a href="http://www.aygfsteel.com/lukangping/articles/328167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">¶õÍпËǰÆì</a>| <a href="http://" target="_blank">ä¬ÄÏÊÐ</a>| <a href="http://" target="_blank">ËÞǨÊÐ</a>| <a href="http://" target="_blank">º¼½õÆì</a>| <a href="http://" target="_blank">лͨÃÅÏØ</a>| <a href="http://" target="_blank">ÉîÖÝÊÐ</a>| <a href="http://" target="_blank">ÇåË®ºÓÏØ</a>| <a href="http://" target="_blank">¶«Ã÷ÏØ</a>| <a href="http://" target="_blank">¶¼À¼ÏØ</a>| <a href="http://" target="_blank">¼¦ÔóÏØ</a>| <a href="http://" target="_blank">Ó¢É½ÏØ</a>| <a href="http://" target="_blank">ÂåÆÖÏØ</a>| <a href="http://" target="_blank">ÎÚÀ­ÌØÖÐÆì</a>| <a href="http://" target="_blank">ÁÉÑôÊÐ</a>| <a href="http://" target="_blank">ÖÐÄ²ÏØ</a>| <a href="http://" target="_blank">н¨ÏØ</a>| <a href="http://" target="_blank">ÐÂÓàÊÐ</a>| <a href="http://" target="_blank">°¢³ÇÊÐ</a>| <a href="http://" target="_blank">ËÕÄáÌØÓÒÆì</a>| <a href="http://" target="_blank">ÆÕ¶¨ÏØ</a>| <a href="http://" target="_blank">ƽÌÁÏØ</a>| <a href="http://" target="_blank">´íÄÇÏØ</a>| <a href="http://" target="_blank">Ãñ·áÏØ</a>| <a href="http://" target="_blank">ÅÌÉ½ÏØ</a>| <a href="http://" target="_blank">³þÐÛÊÐ</a>| <a href="http://" target="_blank">ÔÀ³ØÏØ</a>| <a href="http://" target="_blank">Ì©À´ÏØ</a>| <a href="http://" target="_blank">ÎͰ²ÏØ</a>| <a href="http://" target="_blank">Ò³ÓÎ</a>| <a href="http://" target="_blank">´ëÇÚÏØ</a>| <a href="http://" target="_blank">ºâÑôÊÐ</a>| <a href="http://" target="_blank">ÑôË·ÏØ</a>| <a href="http://" target="_blank">ÇúÑôÏØ</a>| <a href="http://" target="_blank">ÇåÕòÊÐ</a>| <a href="http://" target="_blank">¹ÝÌÕÏØ</a>| <a href="http://" target="_blank">ÎijÉÏØ</a>| <a href="http://" target="_blank">ÎÞÎýÊÐ</a>| <a href="http://" target="_blank">зáÏØ</a>| <a href="http://" target="_blank">¸ÞÀ¼ÏØ</a>| <a href="http://" target="_blank">¸ß¶û·ò</a>| <a href="http://" target="_blank">ÚüÖÝÊÐ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>