春天的光輝

          把春天的氣息和光芒灑滿(mǎn)大地,沐浴著身邊的每一個(gè)人... ...

           

          2006年10月13日

          2007年流行的10句話(huà)!


          2007年流行的10句話(huà):至理名言呀,不看絕對(duì)后

          悔,嗯,不相信,不要看了


          1,騎白馬的不一定是王子,他可能是唐僧;

          2,帶翅膀的也不一定是天使,媽媽說(shuō),那是鳥(niǎo)人。

          3,水至清則無(wú)魚(yú),人至賤則無(wú)敵!

          4,走自己的路,讓別人打車(chē)去吧。

          5,穿別人的鞋,走自己的路,讓他們找去吧。

          6,我不是隨便的人,我隨便起來(lái)不是人。

          7,女人無(wú)所謂正派,正派是因?yàn)槭艿降囊T不夠;男人無(wú)所謂忠誠(chéng),忠誠(chéng)是因?yàn)楸撑训幕I碼太低。

          8,聰明的女人對(duì)付男人,而笨女人對(duì)付女人;

          9,站的更高,尿的更遠(yuǎn)。

          10,一個(gè)大學(xué)生的最低奮斗目標(biāo):農(nóng)婦,山泉,有點(diǎn)田

          呵呵,寫(xiě)的有點(diǎn)意思。

          posted @ 2007-01-17 17:18 春輝 閱讀(215) | 評(píng)論 (0)編輯 收藏

          Java中四種XML解析技術(shù)之不完全測(cè)試 【轉(zhuǎn)】

          在平時(shí)工作中,難免會(huì)遇到把XML作為數(shù)據(jù)存儲(chǔ)格式。面對(duì)目前種類(lèi)繁多的解決方案,哪個(gè)最適合我們呢?在這篇文章中,我對(duì)這四種主流方案做一個(gè)不完全評(píng)測(cè),僅僅針對(duì)遍歷XML這塊來(lái)測(cè)試,因?yàn)楸闅vXML是工作中使用最多的(至少我認(rèn)為)。

            預(yù)備

            測(cè)試環(huán)境:

            AMD毒龍1.4G OC 1.5G、256M DDR333、Windows2000 Server SP4、Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在Debug模式下測(cè)試。

            XML文件格式如下:

            <?xml version="1.0" encoding="GB2312"?><RESULT><VALUE>

            <NO>A1234</NO>

            <ADDR>四川省XX縣XX鎮(zhèn)XX路X段XX號(hào)</ADDR></VALUE><VALUE>

            <NO>B1234</NO>

            <ADDR>四川省XX市XX鄉(xiāng)XX村X(qián)X組</ADDR></VALUE></RESULT>

            測(cè)試方法:

            采用JSP端調(diào)用Bean(至于為什么采用JSP來(lái)調(diào)用,請(qǐng)參考:http://blog.csdn.net/rosen/archive/2004/10/15/138324.aspx),讓每一種方案分別解析10K、100K、1000K、10000K的XML文件,計(jì)算其消耗時(shí)間(單位:毫秒)。

            JSP文件:

            <%@ page contentType="text/html; charset=gb2312" %><%@ page import="com.test.*"%>

            <html><body><%String args[]={""};MyXMLReader.main(args);%></body></html>

            測(cè)試

            首先出場(chǎng)的是DOM(JAXP Crimson解析器)

            DOM是用與平臺(tái)和語(yǔ)言無(wú)關(guān)的方式表示XML文檔的官方W3C標(biāo)準(zhǔn)。DOM是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息片斷的集合。這個(gè)層次結(jié)構(gòu)允許開(kāi)發(fā)人員在樹(shù)中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而DOM被認(rèn)為是基于樹(shù)或基于對(duì)象的。DOM以及廣義的基于樹(shù)的處理具有幾個(gè)優(yōu)點(diǎn)。首先,由于樹(shù)在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對(duì)數(shù)據(jù)和結(jié)構(gòu)作出更改。它還可以在任何時(shí)候在樹(shù)中上下導(dǎo)航,而不是像SAX那樣是一次性的處理。DOM使用起來(lái)也要簡(jiǎn)單得多。

            另一方面,對(duì)于特別大的文檔,解析和加載整個(gè)文檔可能很慢且很耗資源,因此使用其他手段來(lái)處理這樣的數(shù)據(jù)會(huì)更好。這些基于事件的模型,比如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("車(chē)牌號(hào)碼:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());

              System.out.println("車(chē)主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());

            }

            }catch(Exception e){

             e.printStackTrace();

            }

            System.out.println("運(yùn)行時(shí)間:"+(System.currentTimeMillis() - lasting)+"毫秒");}}

            10k消耗時(shí)間:265 203 219 172

            100k消耗時(shí)間:9172 9016 8891 9000

            1000k消耗時(shí)間:691719 675407 708375 739656

            10000k消耗時(shí)間:OutOfMemoryError

            接著是SAX

            這種處理的優(yōu)點(diǎn)非常類(lèi)似于流媒體的優(yōu)點(diǎn)。分析能夠立即開(kāi)始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時(shí)檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲(chǔ)在內(nèi)存中。這對(duì)于大型文檔來(lái)說(shuō)是個(gè)巨大的優(yōu)點(diǎn)。事實(shí)上,應(yīng)用程序甚至不必解析整個(gè)文檔;它可以在某個(gè)條件得到滿(mǎn)足時(shí)停止解析。一般來(lái)說(shuō),SAX還比它的替代者DOM快許多。
            選擇DOM還是選擇SAX?

            對(duì)于需要自己編寫(xiě)代碼來(lái)處理XML文檔的開(kāi)發(fā)人員來(lái)說(shuō),

            選擇DOM還是SAX解析模型是一個(gè)非常重要的設(shè)計(jì)決策。

            DOM采用建立樹(shù)形結(jié)構(gòu)的方式訪(fǎng)問(wèn)XML文檔,而SAX采用的事件模型。

            DOM解析器把XML文檔轉(zhuǎn)化為一個(gè)包含其內(nèi)容的樹(shù),并可以對(duì)樹(shù)進(jìn)行遍歷。用DOM解析模型的優(yōu)點(diǎn)是編程容易,開(kāi)發(fā)人員只需要調(diào)用建樹(shù)的指令,然后利用navigation APIs訪(fǎng)問(wèn)所需的樹(shù)節(jié)點(diǎn)來(lái)完成任務(wù)。可以很容易的添加和修改樹(shù)中的元素。然而由于使用DOM解析器的時(shí)候需要處理整個(gè)XML文檔,所以對(duì)性能和內(nèi)存的要求比較高,尤其是遇到很大的XML文件的時(shí)候。由于它的遍歷能力,DOM解析器常用于XML文檔需要頻繁的改變的服務(wù)中。

            SAX解析器采用了基于事件的模型,它在解析XML文檔的時(shí)候可以觸發(fā)一系列的事件,當(dāng)發(fā)現(xiàn)給定的tag的時(shí)候,它可以激活一個(gè)回調(diào)方法,告訴該方法制定的標(biāo)簽已經(jīng)找到。SAX對(duì)內(nèi)存的要求通常會(huì)比較低,因?yàn)樗岄_(kāi)發(fā)人員自己來(lái)決定所要處理的tag。特別是當(dāng)開(kāi)發(fā)人員只需要處理文檔中所包含的部分?jǐn)?shù)據(jù)時(shí),SAX這種擴(kuò)展能力得到了更好的體現(xiàn)。但用SAX解析器的時(shí)候編碼工作會(huì)比較困難,而且很難同時(shí)訪(fǎng)問(wèn)同一個(gè)文檔中的多處不同數(shù)據(jù)。

            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("運(yùn)行時(shí)間:" + (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("車(chē)牌號(hào)碼:" + 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消耗時(shí)間:110 47 109 78

            100k消耗時(shí)間:344 406 375 422

            1000k消耗時(shí)間:3234 3281 3688 3312

            10000k消耗時(shí)間:32578 34313 31797 31890 30328

            然后是JDOM http://www.jdom.org/

            JDOM的目的是成為Java特定文檔模型,它簡(jiǎn)化與XML的交互并且比使用DOM實(shí)現(xiàn)更快。由于是第一個(gè)Java特定模型,JDOM一直得到大力推廣和促進(jìn)。正在考慮通過(guò)“Java規(guī)范請(qǐng)求JSR-102”將它最終用作“Java標(biāo)準(zhǔn)擴(kuò)展”。從2000年初就已經(jīng)開(kāi)始了JDOM開(kāi)發(fā)。

            JDOM與DOM主要有兩方面不同。首先,JDOM僅使用具體類(lèi)而不使用接口。這在某些方面簡(jiǎn)化了API,但是也限制了靈活性。第二,API大量使用了Collections類(lèi),簡(jiǎn)化了那些已經(jīng)熟悉這些類(lèi)的Java開(kāi)發(fā)者的使用。

            JDOM文檔聲明其目的是“使用20%(或更少)的精力解決80%(或更多)Java/XML問(wèn)題”(根據(jù)學(xué)習(xí)曲線(xiàn)假定為20%)。JDOM對(duì)于大多數(shù)Java/XML應(yīng)用程序來(lái)說(shuō)當(dāng)然是有用的,并且大多數(shù)開(kāi)發(fā)者發(fā)現(xiàn)API比DOM容易理解得多。JDOM還包括對(duì)程序行為的相當(dāng)廣泛檢查以防止用戶(hù)做任何在XML中無(wú)意義的事。然而,它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情況下的錯(cuò)誤)。這也許是比學(xué)習(xí)DOM或JDOM接口都更有意義的工作。

            JDOM自身不包含解析器。它通常使用SAX2解析器來(lái)解析和驗(yàn)證輸入XML文檔(盡管它還可以將以前構(gòu)造的DOM表示作為輸入)。它包含一些轉(zhuǎn)換器以將JDOM表示輸出成SAX2事件流、DOM模型或XML文本文檔。JDOM是在Apache許可證變體下發(fā)布的開(kāi)放源碼。

            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("車(chē)牌號(hào)碼:" + ((Element)allChildren.get(i)).getChild("NO").getText());

              System.out.println("車(chē)主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());

             }

            } catch (Exception e) {

             e.printStackTrace();

            }

            System.out.println("運(yùn)行時(shí)間:" + (System.currentTimeMillis() - lasting) + "毫秒");}}

            10k消耗時(shí)間:125 62 187 94

            100k消耗時(shí)間:704 625 640 766

            1000k消耗時(shí)間:27984 30750 27859 30656

            10000k消耗時(shí)間:OutOfMemoryError

            最后是DOM4J http://dom4j.sourceforge.net/

            雖然DOM4J代表了完全獨(dú)立的開(kāi)發(fā)結(jié)果,但最初,它是JDOM的一種智能分支。它合并了許多超出基本XML文檔表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構(gòu)建文檔表示的選項(xiàng),它通過(guò)DOM4J API和標(biāo)準(zhǔn)DOM接口具有并行訪(fǎng)問(wèn)功能。從2000下半年開(kāi)始,它就一直處于開(kāi)發(fā)之中。

            為支持所有這些功能,DOM4J使用接口和抽象基本類(lèi)方法。DOM4J大量使用了API中的Collections類(lèi),但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然DOM4J付出了更復(fù)雜的API的代價(jià),但是它提供了比JDOM大得多的靈活性。

            在添加靈活性、XPath集成和對(duì)大文檔處理的目標(biāo)時(shí),DOM4J的目標(biāo)與JDOM是一樣的:針對(duì)Java開(kāi)發(fā)者的易用性和直觀操作。它還致力于成為比JDOM更完整的解決方案,實(shí)現(xiàn)在本質(zhì)上處理所有Java/XML問(wèn)題的目標(biāo)。在完成該目標(biāo)時(shí),它比JDOM更少?gòu)?qiáng)調(diào)防止不正確的應(yīng)用程序行為。

            DOM4J是一個(gè)非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強(qiáng)大和極端易用使用的特點(diǎn),同時(shí)它也是一個(gè)開(kāi)放源代碼的軟件。如今你可以看到越來(lái)越多的Java軟件都在使用DOM4J來(lái)讀寫(xiě)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("車(chē)牌號(hào)碼:" + foo.elementText("NO"));

              System.out.println("車(chē)主地址:" + foo.elementText("ADDR"));

             }

            } catch (Exception e) {

             e.printStackTrace();

            }

            System.out.println("運(yùn)行時(shí)間:" + (System.currentTimeMillis() - lasting) + "毫秒");}}

            10k消耗時(shí)間:109 78 109 31

            100k消耗時(shí)間:297 359 172 312

            1000k消耗時(shí)間:2281 2359 2344 2469

            10000k消耗時(shí)間:20938 19922 20031 21078

            JDOM和DOM在性能測(cè)試時(shí)表現(xiàn)不佳,在測(cè)試10M文檔時(shí)內(nèi)存溢出。在小文檔情況下還值得考慮使用DOM和JDOM。雖然JDOM的開(kāi)發(fā)者已經(jīng)說(shuō)明他們期望在正式發(fā)行版前專(zhuān)注性能問(wèn)題,但是從性能觀點(diǎn)來(lái)看,它確實(shí)沒(méi)有值得推薦之處。另外,DOM仍是一個(gè)非常好的選擇。DOM實(shí)現(xiàn)廣泛應(yīng)用于多種編程語(yǔ)言。它還是許多其它與XML相關(guān)的標(biāo)準(zhǔn)的基礎(chǔ),因?yàn)樗将@得W3C推薦(與基于非標(biāo)準(zhǔn)的Java模型相對(duì)),所以在某些類(lèi)型的項(xiàng)目中可能也需要它(如在JavaScript中使用DOM)。

            SAX表現(xiàn)較好,這要依賴(lài)于它特定的解析方式。一個(gè)SAX檢測(cè)即將到來(lái)的XML流,但并沒(méi)有載入到內(nèi)存(當(dāng)然當(dāng)XML流被讀入時(shí),會(huì)有部分文檔暫時(shí)隱藏在內(nèi)存中)。

            無(wú)疑,DOM4J是這場(chǎng)測(cè)試的獲勝者,目前許多開(kāi)源項(xiàng)目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J來(lái)讀取XML配置文件。如果不考慮可移植性,那就采用DOM4J吧!(文/rosen)(轉(zhuǎn)載文章請(qǐng)保留出處:Java家(www.javajia.com))

          更多精彩文章:主題文章: Java中四種XML解析技術(shù)之不完全測(cè)試

          posted @ 2006-10-13 14:40 春輝 閱讀(206) | 評(píng)論 (0)編輯 收藏

          dom4j xml解析

          Parsing XML

          One of the first things you'll probably want to do is to parse an XML document of some kind. This is easy to do in dom4j. The following code demonstrates how to this.

          import java.net.URL;
          
          import org.dom4j.Document;
          import org.dom4j.DocumentException;
          import org.dom4j.io.SAXReader;
          
          public class Foo {
          
              public Document parse(URL url) throws DocumentException {
                  SAXReader reader = new SAXReader();
                  Document document = reader.read(url);
                  return document;
              }
          }
          

          Using Iterators

          A document can be navigated using a variety of methods that return standard Java Iterators. For example

              public void bar(Document document) throws DocumentException {
          
                  Element root = document.getRootElement();
          
                  // iterate through child elements of root
                  for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
                      Element element = (Element) i.next();
                      // do something
                  }
          
                  // iterate through child elements of root with element name "foo"
                  for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
                      Element foo = (Element) i.next();
                      // do something
                  }
          
                  // iterate through attributes of root 
                  for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
                      Attribute attribute = (Attribute) i.next();
                      // do something
                  }
               }
          

          Powerful Navigation with XPath

          In dom4j XPath expressions can be evaluated on the Document or on any Node in the tree (such as Attribute, Element or ProcessingInstruction). This allows complex navigation throughout the document with a single line of code. For example.

              public void bar(Document document) {
                  List list = document.selectNodes( "http://foo/bar" );
          
                  Node node = document.selectSingleNode( "http://foo/bar/author" );
          
                  String name = node.valueOf( "@name" );
              }
          

          For example if you wish to find all the hypertext links in an XHTML document the following code would do the trick.

              public void findLinks(Document document) throws DocumentException {
          
                  List list = document.selectNodes( "http://a/@href" );
          
                  for (Iterator iter = list.iterator(); iter.hasNext(); ) {
                      Attribute attribute = (Attribute) iter.next();
                      String url = attribute.getValue();
                  }
              }
          

          If you need any help learning the XPath language we highly recommend the Zvon tutorial which allows you to learn by example.

          Fast Looping

          If you ever have to walk a large XML document tree then for performance we recommend you use the fast looping method which avoids the cost of creating an Iterator object for each loop. For example

              public void treeWalk(Document document) {
                  treeWalk( document.getRootElement() );
              }
          
              public void treeWalk(Element element) {
                  for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
                      Node node = element.node(i);
                      if ( node instanceof Element ) {
                          treeWalk( (Element) node );
                      }
                      else {
                          // do something....
                      }
                  }
              }
          

          Creating a new XML document

          Often in dom4j you will need to create a new document from scratch. Here's an example of doing that.

          import org.dom4j.Document;
          import org.dom4j.DocumentHelper;
          import org.dom4j.Element;
          
          public class Foo {
          
              public Document createDocument() {
                  Document document = DocumentHelper.createDocument();
                  Element root = document.addElement( "root" );
          
                  Element author1 = root.addElement( "author" )
                      .addAttribute( "name", "James" )
                      .addAttribute( "location", "UK" )
                      .addText( "James Strachan" );
                  
                  Element author2 = root.addElement( "author" )
                      .addAttribute( "name", "Bob" )
                      .addAttribute( "location", "US" )
                      .addText( "Bob McWhirter" );
          
                  return document;
              }
          }
          

          Writing a document to a file

          A quick and easy way to write a Document (or any Node) to a Writer is via the write() method.

            FileWriter out = new FileWriter( "foo.xml" );
            document.write( out );
          

          If you want to be able to change the format of the output, such as pretty printing or a compact format, or you want to be able to work with Writer objects or OutputStream objects as the destination, then you can use the XMLWriter class.

          import org.dom4j.Document;
          import org.dom4j.io.OutputFormat;
          import org.dom4j.io.XMLWriter;
          
          public class Foo {
          
              public void write(Document document) throws IOException {
          
                  // lets write to a file
                  XMLWriter writer = new XMLWriter(
                      new FileWriter( "output.xml" )
                  );
                  writer.write( document );
                  writer.close();
          
          
                  // Pretty print the document to System.out
                  OutputFormat format = OutputFormat.createPrettyPrint();
                  writer = new XMLWriter( System.out, format );
                  writer.write( document );
          
                  // Compact format to System.out
                  format = OutputFormat.createCompactFormat();
                  writer = new XMLWriter( System.out, format );
                  writer.write( document );
              }
          }
          

          Converting to and from Strings

          If you have a reference to a Document or any other Node such as an Attribute or Element, you can turn it into the default XML text via the asXML() method.

                  Document document = ...;
                  String text = document.asXML();
          

          If you have some XML as a String you can parse it back into a Document again using the helper method DocumentHelper.parseText()

                  String text = "<person> <name>James</name> </person>";
                  Document document = DocumentHelper.parseText(text);
          

          Styling a Document with XSLT

          Applying XSLT on a Document is quite straightforward using the JAXP API from Sun. This allows you to work against any XSLT engine such as Xalan or SAXON. Here is an example of using JAXP to create a transformer and then applying it to a Document.

          import javax.xml.transform.Transformer;
          import javax.xml.transform.TransformerFactory;
          
          import org.dom4j.Document;
          import org.dom4j.io.DocumentResult;
          import org.dom4j.io.DocumentSource;
          
          public class Foo {
          
              public Document styleDocument(
                  Document document, 
                  String stylesheet
              ) throws Exception {
          
                  // load the transformer using JAXP
                  TransformerFactory factory = TransformerFactory.newInstance();
                  Transformer transformer = factory.newTransformer( 
                      new StreamSource( stylesheet ) 
                  );
          
                  // now lets style the given document
                  DocumentSource source = new DocumentSource( document );
                  DocumentResult result = new DocumentResult();
                  transformer.transform( source, result );
          
                  // return the transformed document
                  Document transformedDoc = result.getDocument();
                  return transformedDoc;
              }
          }
          

          posted @ 2006-10-13 11:15 春輝 閱讀(1367) | 評(píng)論 (1)編輯 收藏

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          我的鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 庆元县| 炉霍县| 阜阳市| 鄱阳县| 绩溪县| 宝兴县| 闽清县| 中牟县| 延庆县| 莱州市| 海口市| 兴隆县| 永春县| 兴化市| 巴林右旗| 淮南市| 上饶县| 吉水县| 永修县| 孝义市| 阿鲁科尔沁旗| 石柱| 洱源县| 上蔡县| 溧阳市| 博野县| 仁寿县| 临沭县| 中卫市| 平武县| 防城港市| 邯郸市| 渝中区| 汽车| 贵阳市| 那曲县| 吐鲁番市| 普定县| 洪雅县| 夹江县| 周至县|