|
ÔÚÆ½Ê±¹¤×÷ÖУ¬ÄÑÃâ»áÓöµ½°Ñ XML ×÷ΪÊý¾Ý´æ´¢¸ñʽ¡£Ãæ¶ÔĿǰÖÖÀà·±¶àµÄ½â¾ö·½°¸£¬Äĸö×îÊʺÏÎÒÃÇÄØ£¿ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒ¶ÔÕâËÄÖÖÖ÷Á÷·½°¸×öÒ»¸ö²»ÍêÈ«ÆÀ²â£¬½ö½öÕë¶Ô±éÀú XML Õâ¿éÀ´²âÊÔ£¬ÒòΪ±éÀú XML Êǹ¤×÷ÖÐʹÓÃ×î¶àµÄ£¨ÖÁÉÙÎÒÈÏΪ£©¡£
Ô¤ ±¸
²âÊÔ»·¾³£º AMD ¶¾Áú1.4G OC 1.5G¡¢256M DDR333¡¢Windows2000 Server SP4¡¢Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8£¬ÔÚ Debug ģʽϲâÊÔ¡£ XML Îļþ¸ñʽÈçÏ£º <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>ËÄ´¨Ê¡XXÏØXXÕòXX·X¶ÎXXºÅ</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>ËÄ´¨Ê¡XXÊÐXXÏçXX´åXX×é</ADDR> </VALUE> </RESULT> ²âÊÔ·½·¨£º ²ÉÓà JSP ¶Ëµ÷ÓÃBean£¨ÖÁÓÚΪʲô²ÉÓÃJSPÀ´µ÷Óã¬Çë²Î¿¼£ºhttp://blog.csdn.net/rosen/archive/2004/10/15/138324.aspx£©£¬ÈÃÿһÖÖ·½°¸·Ö±ð½âÎö10K¡¢100K¡¢1000K¡¢10000KµÄ XML Îļþ£¬¼ÆËãÆäÏûºÄʱ¼ä£¨µ¥Î»:ºÁÃ룩¡£ JSP Îļþ£º <%@ page contentType="text/html; charset=gb2312" %> <%@ page import="com.test.*"%> <html> <body> <% String args[]={""}; MyXMLReader.main(args); %> </body> </html> ²â ÊÔ
Ê×Ïȳö³¡µÄÊÇ DOM£¨JAXP Crimson ½âÎöÆ÷£©
DOM ÊÇÓÃÓëÆ½Ì¨ºÍÓïÑÔÎ޹صķ½Ê½±íʾ XML ÎĵµµÄ¹Ù·½ W3C ±ê×¼¡£DOM ÊÇÒÔ²ã´Î½á¹¹×éÖ¯µÄ½Úµã»òÐÅϢƬ¶ÏµÄ¼¯ºÏ¡£Õâ¸ö²ã´Î½á¹¹ÔÊÐí¿ª·¢ÈËÔ±ÔÚÊ÷ÖÐѰÕÒÌØ¶¨ÐÅÏ¢¡£·ÖÎö¸Ã½á¹¹Í¨³£ÐèÒª¼ÓÔØÕû¸öÎĵµºÍ¹¹Ôì²ã´Î½á¹¹£¬È»ºó²ÅÄÜ×öÈκι¤×÷¡£ÓÉÓÚËüÊÇ»ùÓÚÐÅÏ¢²ã´ÎµÄ£¬Òò¶ø DOM ±»ÈÏΪÊÇ»ùÓÚÊ÷»ò»ùÓÚ¶ÔÏóµÄ¡£DOM ÒÔ¼°¹ãÒåµÄ»ùÓÚÊ÷µÄ´¦Àí¾ßÓм¸¸öÓŵ㡣Ê×ÏÈ£¬ÓÉÓÚÊ÷ÔÚÄÚ´æÖÐÊdz־õģ¬Òò´Ë¿ÉÒÔÐÞ¸ÄËüÒÔ±ãÓ¦ÓóÌÐòÄܶÔÊý¾ÝºÍ½á¹¹×÷³ö¸ü¸Ä¡£Ëü»¹¿ÉÒÔÔÚÈκÎʱºòÔÚÊ÷ÖÐÉÏϵ¼º½£¬¶ø²»ÊÇÏñ SAX ÄÇÑùÊÇÒ»´ÎÐԵĴ¦Àí¡£DOM ʹÓÃÆðÀ´Ò²Òª¼òµ¥µÃ¶à¡£ ÁíÒ»·½Ã棬¶ÔÓÚÌØ±ð´óµÄÎĵµ£¬½âÎöºÍ¼ÓÔØÕû¸öÎĵµ¿ÉÄܺÜÂýÇҺܺÄ×ÊÔ´£¬Òò´ËʹÓÃÆäËûÊÖ¶ÎÀ´´¦ÀíÕâÑùµÄÊý¾Ý»á¸üºÃ¡£ÕâЩ»ùÓÚʼþµÄÄ£ÐÍ£¬±ÈÈç SAX¡£ BeanÎļþ£º package com.test; import java.io.*; import java.util.*; import org.w3c.dom.*; import javax.xml.parsers.*; public class MyXMLReader{ public static void main(String arge[]){ long lasting =System.currentTimeMillis(); try{ File f=new File("data_10k.xml"); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc = builder.parse(f); NodeList nl = doc.getElementsByTagName("VALUE"); for (int i=0;i<nl.getLength();i++){ System.out.print("³µÅƺÅÂë:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); System.out.println(" ³µÖ÷µØÖ·:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); } }catch(Exception e){ e.printStackTrace(); } System.out.println("ÔËÐÐʱ¼ä£º"+(System.currentTimeMillis() - lasting)+" ºÁÃë"); } } 10kÏûºÄʱ¼ä£º265 203 219 172 100kÏûºÄʱ¼ä£º9172 9016 8891 9000 1000kÏûºÄʱ¼ä£º691719 675407 708375 739656 10000kÏûºÄʱ¼ä£ºOutOfMemoryError ½Ó×ÅÊÇ SAX ÕâÖÖ´¦ÀíµÄÓŵã·Ç³£ÀàËÆÓÚÁ÷ýÌåµÄÓŵ㡣·ÖÎöÄܹ»Á¢¼´¿ªÊ¼£¬¶ø²»ÊǵȴýËùÓеÄÊý¾Ý±»´¦Àí¡£¶øÇÒ£¬ÓÉÓÚÓ¦ÓóÌÐòÖ»ÊÇÔÚ¶ÁÈ¡Êý¾Ýʱ¼ì²éÊý¾Ý£¬Òò´Ë²»ÐèÒª½«Êý¾Ý´æ´¢ÔÚÄÚ´æÖС£Õâ¶ÔÓÚ´óÐÍÎĵµÀ´ËµÊǸö¾Þ´óµÄÓŵ㡣ÊÂʵÉÏ£¬Ó¦ÓóÌÐòÉõÖÁ²»±Ø½âÎöÕû¸öÎĵµ£»Ëü¿ÉÒÔÔÚij¸öÌõ¼þµÃµ½Âú×ãʱֹͣ½âÎö¡£Ò»°ãÀ´Ëµ£¬SAX »¹±ÈËüµÄÌæ´úÕß DOM ¿ìÐí¶à¡£
Ñ¡Ôñ DOM »¹ÊÇÑ¡Ôñ SAX £¿ ¶ÔÓÚÐèÒª×Ô¼º±àд´úÂëÀ´´¦Àí XML ÎĵµµÄ¿ª·¢ÈËÔ±À´Ëµ£¬Ñ¡Ôñ DOM »¹ÊÇ SAX ½âÎöÄ£ÐÍÊÇÒ»¸ö·Ç³£ÖØÒªµÄÉè¼Æ¾ö²ß¡£ DOM ²ÉÓý¨Á¢Ê÷ÐνṹµÄ·½Ê½·ÃÎÊ XML Îĵµ£¬¶ø SAX ²ÉÓõÄʼþÄ£ÐÍ¡£ DOM ½âÎöÆ÷°Ñ XML Îĵµ×ª»¯ÎªÒ»¸ö°üº¬ÆäÄÚÈݵÄÊ÷£¬²¢¿ÉÒÔ¶ÔÊ÷½øÐбéÀú¡£Óà DOM ½âÎöÄ£Ð͵ÄÓŵãÊDZà³ÌÈÝÒ×£¬¿ª·¢ÈËÔ±Ö»ÐèÒªµ÷Óý¨Ê÷µÄÖ¸ÁȻºóÀûÓÃnavigation APIs·ÃÎÊËùÐèµÄÊ÷½ÚµãÀ´Íê³ÉÈÎÎñ¡£¿ÉÒÔºÜÈÝÒ×µÄÌí¼ÓºÍÐÞ¸ÄÊ÷ÖеÄÔªËØ¡£È»¶øÓÉÓÚʹÓà DOM ½âÎöÆ÷µÄʱºòÐèÒª´¦ÀíÕû¸ö XML Îĵµ£¬ËùÒÔ¶ÔÐÔÄܺÍÄÚ´æµÄÒªÇó±È½Ï¸ß£¬ÓÈÆäÊÇÓöµ½ºÜ´óµÄ XML ÎļþµÄʱºò¡£ÓÉÓÚËüµÄ±éÀúÄÜÁ¦£¬DOM ½âÎöÆ÷³£ÓÃÓÚ XML ÎĵµÐèҪƵ·±µÄ¸Ä±äµÄ·þÎñÖС£ SAX ½âÎöÆ÷²ÉÓÃÁË»ùÓÚʼþµÄÄ£ÐÍ£¬ËüÔÚ½âÎö XML ÎĵµµÄʱºò¿ÉÒÔ´¥·¢Ò»ÏµÁеÄʼþ£¬µ±·¢ÏÖ¸ø¶¨µÄtagµÄʱºò£¬Ëü¿ÉÒÔ¼¤»îÒ»¸ö»Øµ÷·½·¨£¬¸æË߸÷½·¨Öƶ¨µÄ±êÇ©ÒѾÕÒµ½¡£SAX ¶ÔÄÚ´æµÄÒªÇóͨ³£»á±È½ÏµÍ£¬ÒòΪËüÈÿª·¢ÈËÔ±×Ô¼ºÀ´¾ö¶¨ËùÒª´¦ÀíµÄtag¡£ÌرðÊǵ±¿ª·¢ÈËÔ±Ö»ÐèÒª´¦ÀíÎĵµÖÐËù°üº¬µÄ²¿·ÖÊý¾Ýʱ£¬SAX ÕâÖÖÀ©Õ¹ÄÜÁ¦µÃµ½Á˸üºÃµÄÌåÏÖ¡£µ«Óà SAX ½âÎöÆ÷µÄʱºò±àÂ빤×÷»á±È½ÏÀ§ÄÑ£¬¶øÇÒºÜÄÑͬʱ·ÃÎÊͬһ¸öÎĵµÖеĶദ²»Í¬Êý¾Ý¡£ BeanÎļþ£º package com.test; import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; public class MyXMLReader extends DefaultHandler { java.util.Stack tags = new java.util.Stack(); public MyXMLReader() { super(); } public static void main(String args[]) { long lasting = System.currentTimeMillis(); try { SAXParserFactory sf = SAXParserFactory.newInstance(); SAXParser sp = sf.newSAXParser(); MyXMLReader reader = new MyXMLReader(); sp.parse(new InputSource("data_10k.xml"), reader); } catch (Exception e) { e.printStackTrace(); } System.out.println("ÔËÐÐʱ¼ä£º" + (System.currentTimeMillis() - lasting) + " ºÁÃë"); } public void characters(char ch[], int start, int length) throws SAXException { String tag = (String) tags.peek(); if (tag.equals("NO")) { System.out.print("³µÅƺÅÂ룺" + new String(ch, start, length)); } if (tag.equals("ADDR")) { System.out.println(" µØÖ·:" + new String(ch, start, length)); } } public void startElement( String uri, String localName, String qName, Attributes attrs) { tags.push(qName); } } 10kÏûºÄʱ¼ä£º110 47 109 78 100kÏûºÄʱ¼ä£º344 406 375 422 1000kÏûºÄʱ¼ä£º3234 3281 3688 3312 10000kÏûºÄʱ¼ä£º32578 34313 31797 31890 30328 È»ºóÊÇ JDOM http://www.jdom.org/
JDOM µÄÄ¿µÄÊdzÉΪ Java ÌØ¶¨ÎĵµÄ£ÐÍ£¬Ëü¼ò»¯Óë XML µÄ½»»¥²¢ÇÒ±ÈʹÓà DOM ʵÏÖ¸ü¿ì¡£ÓÉÓÚÊǵÚÒ»¸ö Java ÌØ¶¨Ä£ÐÍ£¬JDOM Ò»Ö±µÃµ½´óÁ¦ÍƹãºÍ´Ù½ø¡£ÕýÔÚ¿¼ÂÇͨ¹ý“Java ¹æ·¶ÇëÇó JSR-102”½«Ëü×îÖÕÓÃ×÷“Java ±ê×¼À©Õ¹”¡£´Ó 2000 Äê³õ¾ÍÒѾ¿ªÊ¼ÁË JDOM ¿ª·¢¡£ JDOM Óë DOM Ö÷ÒªÓÐÁ½·½Ã治ͬ¡£Ê×ÏÈ£¬JDOM ½öʹÓþßÌåÀà¶ø²»Ê¹Óýӿڡ£ÕâÔÚijЩ·½Ãæ¼ò»¯ÁË API£¬µ«ÊÇÒ²ÏÞÖÆÁËÁé»îÐÔ¡£µÚ¶þ£¬API ´óÁ¿Ê¹ÓÃÁË Collections À࣬¼ò»¯ÁËÄÇЩÒѾÊìϤÕâЩÀàµÄ Java ¿ª·¢ÕßµÄʹÓᣠJDOM ÎĵµÉùÃ÷ÆäÄ¿µÄÊǓʹÓà 20%£¨»ò¸üÉÙ£©µÄ¾«Á¦½â¾ö 80%£¨»ò¸ü¶à£©Java/XML ÎÊÌ┣¨¸ù¾ÝѧϰÇúÏß¼Ù¶¨Îª 20%£©¡£JDOM ¶ÔÓÚ´ó¶àÊý Java/XML Ó¦ÓóÌÐòÀ´Ëµµ±È»ÊÇÓÐÓõ쬲¢ÇÒ´ó¶àÊý¿ª·¢Õß·¢ÏÖ API ±È DOM ÈÝÒ×Àí½âµÃ¶à¡£JDOM »¹°üÀ¨¶Ô³ÌÐòÐÐΪµÄÏ൱¹ã·º¼ì²éÒÔ·ÀÖ¹Óû§×öÈκÎÔÚ XML ÖÐÎÞÒâÒåµÄÊ¡£È»¶ø£¬ËüÈÔÐèÒªÄú³ä·ÖÀí½â XML ÒÔ±ã×öһЩ³¬³ö»ù±¾µÄ¹¤×÷£¨»òÕßÉõÖÁÀí½âijЩÇé¿öϵĴíÎ󣩡£ÕâÒ²ÐíÊDZÈѧϰ DOM »ò JDOM ½Ó¿Ú¶¼¸üÓÐÒâÒåµÄ¹¤×÷¡£ JDOM ×ÔÉí²»°üº¬½âÎöÆ÷¡£Ëüͨ³£Ê¹Óà SAX2 ½âÎöÆ÷À´½âÎöºÍÑéÖ¤ÊäÈë XML Îĵµ£¨¾¡¹ÜËü»¹¿ÉÒÔ½«ÒÔǰ¹¹ÔìµÄ DOM ±íʾ×÷ΪÊäÈ룩¡£Ëü°üº¬Ò»Ð©×ª»»Æ÷ÒÔ½« JDOM ±íʾÊä³ö³É SAX2 ʼþÁ÷¡¢DOM Ä£ÐÍ»ò XML Îı¾Îĵµ¡£JDOM ÊÇÔÚ Apache Ðí¿ÉÖ¤±äÌåÏ·¢²¼µÄ¿ª·ÅÔ´Âë¡£ BeanÎļþ£º package com.test; import java.io.*; import java.util.*; import org.jdom.*; import org.jdom.input.*; public class MyXMLReader { public static void main(String arge[]) { long lasting = System.currentTimeMillis(); try { SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(new File("data_10k.xml")); Element foo = doc.getRootElement(); List allChildren = foo.getChildren(); for(int i=0;i<allChildren.size();i++) { System.out.print("³µÅƺÅÂë:" + ((Element)allChildren.get(i)).getChild("NO").getText()); System.out.println(" ³µÖ÷µØÖ·:" + ((Element)allChildren.get(i)).getChild("ADDR").getText()); } } catch (Exception e) { e.printStackTrace(); } System.out.println("ÔËÐÐʱ¼ä£º" + (System.currentTimeMillis() - lasting) + " ºÁÃë"); } } 10kÏûºÄʱ¼ä£º125 62 187 94 100kÏûºÄʱ¼ä£º704 625 640 766 1000kÏûºÄʱ¼ä£º27984 30750 27859 30656 10000kÏûºÄʱ¼ä£ºOutOfMemoryError ×îºóÊÇ DOM4J http://dom4j.sourceforge.net/ ËäÈ» DOM4J ´ú±íÁËÍêÈ«¶ÀÁ¢µÄ¿ª·¢½á¹û£¬µ«×î³õ£¬ËüÊÇ JDOM µÄÒ»ÖÖÖÇÄÜ·ÖÖ§¡£ËüºÏ²¢ÁËÐí¶à³¬³ö»ù±¾ XML Îĵµ±íʾµÄ¹¦ÄÜ£¬°üÀ¨¼¯³ÉµÄ XPath Ö§³Ö¡¢XML Schema Ö§³ÖÒÔ¼°ÓÃÓÚ´óÎĵµ»òÁ÷»¯ÎĵµµÄ»ùÓÚʼþµÄ´¦Àí¡£Ëü»¹ÌṩÁ˹¹½¨Îĵµ±íʾµÄÑ¡ÏËüͨ¹ý DOM4J API ºÍ±ê×¼ DOM ½Ó¿Ú¾ßÓв¢ÐзÃÎʹ¦ÄÜ¡£´Ó 2000 ϰëÄ꿪ʼ£¬Ëü¾ÍÒ»Ö±´¦ÓÚ¿ª·¢Ö®ÖС£
Ϊ֧³ÖËùÓÐÕâЩ¹¦ÄÜ£¬DOM4J ʹÓýӿںͳéÏó»ù±¾Àà·½·¨¡£DOM4J ´óÁ¿Ê¹ÓÃÁË API ÖÐµÄ Collections À࣬µ«ÊÇÔÚÐí¶àÇé¿öÏ£¬Ëü»¹Ìá¹©Ò»Ð©Ìæ´ú·½·¨ÒÔÔÊÐí¸üºÃµÄÐÔÄÜ»ò¸üÖ±½ÓµÄ±àÂë·½·¨¡£Ö±½ÓºÃ´¦ÊÇ£¬ËäÈ» DOM4J ¸¶³öÁ˸ü¸´Ô API µÄ´ú¼Û£¬µ«ÊÇËüÌṩÁË±È JDOM ´óµÃ¶àµÄÁé»îÐÔ¡£ ÔÚÌí¼ÓÁé»îÐÔ¡¢XPath ¼¯³ÉºÍ¶Ô´óÎĵµ´¦ÀíµÄÄ¿±êʱ£¬DOM4J µÄÄ¿±êÓë JDOM ÊÇÒ»ÑùµÄ£ºÕë¶Ô Java ¿ª·¢ÕßµÄÒ×ÓÃÐÔºÍÖ±¹Û²Ù×÷¡£Ëü»¹ÖÂÁ¦ÓÚ³ÉΪ±È JDOM ¸üÍêÕûµÄ½â¾ö·½°¸£¬ÊµÏÖÔÚ±¾ÖÊÉÏ´¦ÀíËùÓÐ Java/XML ÎÊÌâµÄÄ¿±ê¡£ÔÚÍê³É¸ÃÄ¿±êʱ£¬Ëü±È JDOM ¸üÉÙÇ¿µ÷·ÀÖ¹²»ÕýÈ·µÄÓ¦ÓóÌÐòÐÐΪ¡£ DOM4J ÊÇÒ»¸ö·Ç³£·Ç³£ÓÅÐãµÄJava XML API£¬¾ßÓÐÐÔÄÜÓÅÒì¡¢¹¦ÄÜÇ¿´óºÍ¼«¶ËÒ×ÓÃʹÓõÄÌØµã£¬Í¬Ê±ËüÒ²ÊÇÒ»¸ö¿ª·ÅÔ´´úÂëµÄÈí¼þ¡£Èç½ñÄã¿ÉÒÔ¿´µ½Ô½À´Ô½¶àµÄ Java Èí¼þ¶¼ÔÚʹÓà DOM4J À´¶Áд XML£¬ÌرðÖµµÃÒ»ÌáµÄÊÇÁ¬ Sun µÄ JAXM Ò²ÔÚÓà DOM4J¡£ BeanÎļþ£º package com.test; import java.io.*; import java.util.*; import org.dom4j.*; import org.dom4j.io.*; public class MyXMLReader { public static void main(String arge[]) { long lasting = System.currentTimeMillis(); try { File f = new File("data_10k.xml"); SAXReader reader = new SAXReader(); Document doc = reader.read(f); Element root = doc.getRootElement(); Element foo; for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) { foo = (Element) i.next(); System.out.print("³µÅƺÅÂë:" + foo.elementText("NO")); System.out.println(" ³µÖ÷µØÖ·:" + foo.elementText("ADDR")); } } catch (Exception e) { e.printStackTrace(); } System.out.println("ÔËÐÐʱ¼ä£º" + (System.currentTimeMillis() - lasting) + " ºÁÃë"); } } 10kÏûºÄʱ¼ä£º109 78 109 31 100kÏûºÄʱ¼ä£º297 359 172 312 1000kÏûºÄʱ¼ä£º2281 2359 2344 2469 10000kÏûºÄʱ¼ä£º20938 19922 20031 21078 THE END
JDOM ºÍ DOM ÔÚÐÔÄܲâÊÔʱ±íÏÖ²»¼Ñ£¬ÔÚ²âÊÔ 10M ÎĵµÊ±ÄÚ´æÒç³ö¡£ÔÚСÎĵµÇé¿öÏ»¹ÖµµÃ¿¼ÂÇʹÓà DOM ºÍ JDOM¡£ËäÈ» JDOM µÄ¿ª·¢ÕßÒѾ˵Ã÷ËûÃÇÆÚÍûÔÚÕýʽ·¢ÐаæÇ°×¨×¢ÐÔÄÜÎÊÌ⣬µ«ÊÇ´ÓÐÔÄܹ۵ãÀ´¿´£¬ËüȷʵûÓÐÖµµÃÍÆ¼öÖ®´¦¡£ÁíÍ⣬DOM ÈÔÊÇÒ»¸ö·Ç³£ºÃµÄÑ¡Ôñ¡£DOM ʵÏֹ㷺ӦÓÃÓÚ¶àÖÖ±à³ÌÓïÑÔ¡£Ëü»¹ÊÇÐí¶àÆäËüÓë XML Ïà¹ØµÄ±ê×¼µÄ»ù´¡£¬ÒòΪËüÕýʽ»ñµÃ W3C ÍÆ¼ö£¨Óë»ùÓڷDZê×¼µÄ Java Ä£ÐÍÏà¶Ô£©£¬ËùÒÔÔÚijЩÀàÐ͵ÄÏîÄ¿ÖпÉÄÜÒ²ÐèÒªËü£¨ÈçÔÚ JavaScript ÖÐʹÓà DOM£©¡£ SAX±íÏֽϺã¬ÕâÒªÒÀÀµÓÚËüÌØ¶¨µÄ½âÎö·½Ê½¡£Ò»¸ö SAX ¼ì²â¼´½«µ½À´µÄXMLÁ÷£¬µ«²¢Ã»ÓÐÔØÈëµ½Äڴ棨µ±È»µ±XMLÁ÷±»¶ÁÈëʱ£¬»áÓв¿·ÖÎĵµÔÝʱÒþ²ØÔÚÄÚ´æÖУ©¡£ ÎÞÒÉ£¬DOM4JÊÇÕⳡ²âÊԵĻñʤÕߣ¬Ä¿Ç°Ðí¶à¿ªÔ´ÏîÄ¿ÖдóÁ¿²ÉÓà DOM4J£¬ÀýÈç´óÃû¶¦¶¦µÄ Hibernate Ò²Óà DOM4J À´¶ÁÈ¡ XML ÅäÖÃÎļþ¡£Èç¹û²»¿¼ÂÇ¿ÉÒÆÖ²ÐÔ£¬ÄǾͲÉÓÃDOM4J°É£¡ ²Î¿¼ÎÄÏ×£º http://www-900.ibm.com/developerWorks/cn/xml/x-injava/index.shtml http://www-900.ibm.com/developerWorks/cn/xml/x-injava2/index.shtml
£¨Çë×¢Ò⣡ÒýÓá¢×ªÌù±¾ÎÄӦעÃ÷Ô×÷ÕߣºRosen Jiang ÒÔ¼°³ö´¦£ºhttp://blog.csdn.net/rosen£©
±¾ÎĵØÖ·£ºhttp://www.newbooks.com.cn/info/15524.html
|