精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java 處理 XML 的三種主流技術及介紹

開發
XML意為可擴展標記語言,它已經是軟件開發行業中大多數程序員和廠商用以選擇作為數據傳輸的載體。本文作者對于 Java 處理 XML 的幾種主流技術進行一些總結和介紹,希望幫助那些有不同需求的開發人員對于 XML 處理技術的作出最優的選擇。

XML (eXtensible Markup Language) 意為可擴展標記語言,它已經是軟件開發行業中大多數程序員和廠商用以選擇作為數據傳輸的載體。本文作者對于 Java 處理 XML 的幾種主流技術進行一些總結和介紹,希望幫助那些有不同需求的開發人員對于 XML 處理技術的作出最優的選擇。

最初,XML 語言僅僅是意圖用來作為 HTML 語言的替代品而出現的,但是隨著該語言的不斷發展和完善,人們越來越發現它所具有的優點:例如標記語言可擴展,嚴格的語法規定,可使用有意義的標記,內容 存儲和表現分離等等優勢注定了該語言從誕生之日起就會走向輝煌。 XML 語言在成為 W3C 標準之后進入到了一個快速發展的時期,當然它本身所具有的一系列優點和優勢也注定了各大技術廠商對它的偏愛,Java 作為軟件行業的一種開發技術也迅速作出了反應,出現了多種對 XML 支持的工具,本文將會從這個角度對 Java 處理 XML 的幾種主流技術進行介紹,希望能對您有所幫助。在這篇文章中,您將會得到以下信息

Java 提供了哪些優秀的類庫及工具便于程序員對 XML 進行處理 ?

有了 DOM 了,其它工具類庫還有必要么 ?

幾個小例程帶你快速了解這三種解析方式

Java 有哪些優秀的類庫及工具便于程序員對 XML 進行處理 ?

大名鼎鼎的 DOM

綠色環保的 SAX

默默無聞的 Digester

XML 三種解析方式簡介

大名鼎鼎的 DOM

說它大名鼎鼎可是一點不為過,DOM 是 W3C 處理 XML 的標準 API,它是許多其它與 XML 處理相關的標準的基礎,不僅是 Java,其它諸如 Javascript,PHP,MS .NET 等等語言都實現了該標準, 成為了應用最為廣泛的 XML 處理方式。當然,為了能提供更多更加強大的功能,Java 對于 DOM 直接擴展工具類有很多,比如很多 Java 程序員耳熟能詳的 JDOM,DOM4J 等等, 它們基本上屬于對 DOM 接口功能的擴充,保留了很多 DOM API 的特性,許多原本的 DOM 程序員甚至都沒有任何障礙就熟練掌握了另外兩者的使用,直觀、易于操作的方式使它深受廣大 Java 程序員的喜愛。

綠色環保的 SAX

SAX 的應運而生有它特殊的需要,為什么說它綠色環保呢,這是因為 SAX 使用了最少的系統資源和最快速的解析方式對 XML 處理提供了支持。 但隨之而來繁瑣的查找方式也給廣大程序員帶來許多困擾,常常令人頭痛不已,同時它對 XPath 查詢功能的支持,令人們對它又愛又恨。

默默無聞的 Digester:XML 的 JavaBean 化

Digester 是 apache 基金組織下的一個開源項目,筆者對它的了解源于對 Struts 框架的研究,是否有很多程序員想要一解各大開源框架的設計甚至想要自己寫一個功能強大的框架時會碰到這樣一個難題: 這些形形色色的用 XML 語言標記的框架配置文件,框架底層是用什么技術來解析呢? DOM 解析耗費時間,SAX 解析又過于繁瑣,況且每次解析系統開銷也會過大, 于是,大家想到需要用與 XML 結構相對應的 JavaBean 來裝載這些信息,由此 Digester 應運而生。它的出現為 XML 轉換為 JavaBean 對象的需求帶來了方便的操作接口,使得更多的類似需求得到了比較完美的解決方法, 不再需要程序員自己實現此類繁瑣的解析程序了。與此同時 SUN 也推出了 XML 和 JavaBean 轉換工具類 JAXB,有興趣的讀者可以自行了解。

三種解析方式比較

DOM

優缺點:實現 W3C 標準,有多種編程語言支持這種解析方式,并且這種方法本身操作上簡單快捷,十分易于初學者掌握。其處理方式是將 XML 整個作為類似樹結構的方式讀入內存中以便操作及解析,因此支持應用程序對 XML 數據的內容和結構進行修改,但是同時由于其需要在處理開始時將整個 XML 文件讀入到內存中去進行分析,因此其在解析大數據量的 XML 文件時會遇到類似于內存泄露以及程序崩潰的風險,請對這點多加注意。

適用范圍:小型 XML 文件解析、需要全解析或者大部分解析 XML、需要修改 XML 樹內容以生成自己的對象模型

SAX

SAX 從根本上解決了 DOM 在解析 XML 文檔時產生的占用大量資源的問題。其實現是通過類似于流解析的技術,通讀整個 XML 文檔樹,通過事件處理器來響應程序員對于 XML 數據解析的需求。由于其不需要將整個 XML 文檔讀入內存當中,它對系統資源的節省是十分顯而易見的,它在一些需要處理大型 XML 文檔以及性能要求較高的場合有起了十分重要的作用。支持 XPath 查詢的 SAX 使得開發人員更加靈活,處理起 XML 來更加的得心應手。但是同時,其仍然有一些不足之處也困擾廣大的開發人員:首先是它十分復雜的 API 接口令人望而生畏,其次由于其是屬于類似流解析的文件掃描方式,因此不支持應用程序對于 XML 樹內容結構等的修改,可能會有不便之處。

適用范圍:大型 XML 文件解析、只需要部分解析或者只想取得部分 XML 樹內容、有 XPath 查詢需求、有自己生成特定 XML 樹對象模型的需求

Digester/JAXB

優缺點 : 由于其是在上述兩者的基礎上衍生出來的工具類,為的是滿足將 XML 轉換為 JavaBean 的特殊需求,故而沒有什么特別明顯的優缺點。作為大名鼎鼎的開源框架 Struts 的 XML 解析工具 Digester,為我們帶來了將 XML 轉換為 JavaBean 的可靠方法。

適用范圍 : 有將 XML 文檔直接轉換為 JavaBean 需求。

應用示例請見第二頁

#p#

下面給出一段用于解析的 XML 片段:

  1. <?xml version="1.0" encoding="UTF-8"?>   
  2.  <books>   
  3.    <book id="001">   
  4.       <title>Harry Potter</title>   
  5.       <author>J K. Rowling</author>   
  6.    </book>   
  7.    <book id="002">   
  8.       <title>Learning XML</title>   
  9.       <author>Erik T. Ray</author>   
  10.    </book>   
  11.  </books>  

DOM 解析 XML

Java 中的 DOM 接口簡介: JDK 中的 DOM API 遵循 W3C DOM 規范,其中 org.w3c.dom 包提供了 Document、DocumentType、Node、NodeList、Element 等接口, 這些接口均是訪問 DOM 文檔所必須的。我們可以利用這些接口創建、遍歷、修改 DOM 文檔。

javax.xml.parsers 包中的 DoumentBuilder 和 DocumentBuilderFactory 用于解析 XML 文檔生成對應的 DOM Document 對象。

javax.xml.transform.dom 和 javax.xml.transform.stream 包中 DOMSource 類和 StreamSource 類,用于將更新后的 DOM 文檔寫入 XML 文件。

下面給出一個運用 DOM 解析 XML 的例子:

  1. import java.io.File;   
  2. import java.io.IOException;   
  3. import javax.xml.parsers.DocumentBuilder;   
  4. import javax.xml.parsers.DocumentBuilderFactory;   
  5. import javax.xml.parsers.ParserConfigurationException;   
  6. import org.w3c.dom.Document;   
  7. import org.w3c.dom.Element;   
  8. import org.w3c.dom.Node;   
  9. import org.w3c.dom.NodeList;   
  10. import org.xml.sax.SAXException;   
  11.  
  12. public class DOMParser {   
  13.   DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();   
  14.   //Load and parse XML file into DOM   
  15.   public Document parse(String filePath) {   
  16.      Document document = null;   
  17.      try {   
  18.         //DOM parser instance   
  19.         DocumentBuilder builder = builderFactory.newDocumentBuilder();   
  20.         //parse an XML file into a DOM tree   
  21.         document = builder.parse(new File(filePath));   
  22.      } catch (ParserConfigurationException e) {   
  23.         e.printStackTrace();    
  24.      } catch (SAXException e) {   
  25.         e.printStackTrace();   
  26.      } catch (IOException e) {   
  27.         e.printStackTrace();   
  28.      }   
  29.      return document;   
  30.   }   
  31.  
  32.   public static void main(String[] args) {   
  33.         DOMParser parser = new DOMParser();   
  34.         Document document = parser.parse("books.xml");   
  35.         //get root element   
  36.         Element rootElement = document.getDocumentElement();   
  37.  
  38.         //traverse child elements   
  39.         NodeList nodes = rootElement.getChildNodes();   
  40.         for (int i=0; i < nodes.getLength(); i++)   
  41.         {   
  42.            Node node = nodes.item(i);   
  43.            if (node.getNodeType() == Node.ELEMENT_NODE) {     
  44.               Element child = (Element) node;   
  45.               //process child element   
  46.            }   
  47.         }   
  48.  
  49.         NodeList nodeList = rootElement.getElementsByTagName("book");   
  50.         if(nodeList != null)   
  51.         {   
  52.            for (int i = 0 ; i < nodeList.getLength(); i++)   
  53.            {   
  54.               Element element = (Element)nodeList.item(i);   
  55.               String id = element.getAttribute("id");   
  56.            }   
  57.         }   
  58.   }   
  59. }  

在上面的例子中,DOMParser 的 Parse() 方法負責解析 XML 文件并生成對應的 DOM Document 對象。其中 DocumentBuilderFactory 用于生成 DOM 文檔解析器以便解析 XML 文檔。 在獲取了 XML 文件對應的 Document 對象之后,我們可以調用一系列的 API 方便的對文檔對象模型中的元素進行訪問和處理。 需要注意的是調用 Element 對象的 getChildNodes() 方法時將返回其下所有的子節點,其中包括空白節點,因此需要在處理子 Element 之前對節點類型加以判斷。

可以看出 DOM 解析 XML 易于開發,只需要通過解析器建立起 XML 對應的 DOM 樹型結構后便可以方便的使用 API 對節點進行訪問和處理,支持節點的刪除和修改等。 但是 DOM 解析 XML 文件時會將整個 XML 文件的內容解析成樹型結構存放在內存中,因此不適合用 DOM 解析很大的 XML 文件。

SAX 解析 XML

與 DOM 建立樹形結構的方式不同,SAX 采用事件模型來解析 XML 文檔,是解析 XML 文檔的一種更快速、更輕量的方法。 利用 SAX 可以對 XML 文檔進行有選擇的解析和訪問,而不必像 DOM 那樣加載整個文檔,因此它對內存的要求較低。 但 SAX 對 XML 文檔的解析為一次性讀取,不創建任何文檔對象,很難同時訪問文檔中的多處數據。

下面是一個 SAX 解析 XML 的例子:

  1. import org.xml.sax.Attributes;   
  2. import org.xml.sax.SAXException;   
  3. import org.xml.sax.XMLReader;   
  4. import org.xml.sax.helpers.DefaultHandler;   
  5. import org.xml.sax.helpers.XMLReaderFactory;   
  6.  
  7. public class SAXParser {   
  8.  
  9.   class BookHandler extends DefaultHandler {   
  10.      private List<String> nameList;   
  11.      private boolean title = false;   
  12.     
  13.      public List<String> getNameList() {   
  14.         return nameList;   
  15.      }   
  16.      // Called at start of an XML document   
  17.      @Override   
  18.      public void startDocument() throws SAXException {   
  19.         System.out.println("Start parsing document...");   
  20.         nameList = new ArrayList<String>();   
  21.      }   
  22.      // Called at end of an XML document   
  23.      @Override   
  24.      public void endDocument() throws SAXException {    
  25.         System.out.println("End");    
  26.      }   
  27.        
  28.      /**   
  29.       * Start processing of an element.   
  30.       * @param namespaceURI  Namespace URI   
  31.       * @param localName  The local name, without prefix   
  32.       * @param qName  The qualified name, with prefix   
  33.       * @param atts  The attributes of the element   
  34.       */   
  35.      @Override   
  36.      public void startElement(String uri, String localName, String qName,   
  37.      Attributes atts) throws SAXException {   
  38.         // Using qualified name because we are not using xmlns prefixes here.   
  39.         if (qName.equals("title")) {   
  40.            title = true;   
  41.         }   
  42.      }   
  43.     
  44.      @Override   
  45.      public void endElement(String namespaceURI, String localName, String qName)   
  46.         throws SAXException {   
  47.         // End of processing current element   
  48.         if (title) {   
  49.            title = false;   
  50.         }   
  51.      }   
  52.               
  53.      @Override   
  54.      public void characters(char[] ch, int start, int length) {   
  55.         // Processing character data inside an element   
  56.         if (title) {   
  57.            String bookTitle = new String(ch, start, length);   
  58.            System.out.println("Book title: " + bookTitle);   
  59.            nameList.add(bookTitle);   
  60.         }   
  61.      }   
  62.           
  63.   }   
  64.  
  65.   public static void main(String[] args) throws SAXException, IOException {   
  66.      XMLReader parser = XMLReaderFactory.createXMLReader();   
  67.      BookHandler bookHandler = (new SAXParser()).new BookHandler();   
  68.      parser.setContentHandler(bookHandler);   
  69.      parser.parse("books.xml");   
  70.      System.out.println(bookHandler.getNameList());   
  71.   }   
  72. }  

SAX 解析器接口和事件處理器接口定義在 org.xml.sax 包中。主要的接口包括 ContentHandler、DTDHandler、EntityResolver 及 ErrorHandler。 其中 ContentHandler 是主要的處理器接口,用于處理基本的文檔解析事件;DTDHandler 和 EntityResolver 接口用于處理與 DTD 驗證和實體解析相關的事件; ErrorHandler 是基本的錯誤處理接口。DefaultHandler 類實現了上述四個事件處理接口。上面的例子中 BookHandler 繼承了 DefaultHandler 類, 并覆蓋了其中的五個回調方法 startDocument()、endDocument()、startElement()、endElement() 及 characters() 以加入自己的事件處理邏輯。

Digester 解析 XML

為了滿足將 XML 轉換為 JavaBean 的特殊需求,Apache 旗下的一個名為 Digester 的工具為我們提供了這么一個選擇。由于最終是將 XML 轉化為 JavaBean 存儲在內存當中, 故而解析性能等方面其實與使用者并沒有多大關系。解析的關鍵在于用以匹配 XML 的模式以及規則等,由于該工具較為復雜,限于篇幅,作者只能給予簡單的介紹。

下面是一個 Digester 解析 XML 的例子片段:

  1. // 定義要解析的 XML 的路徑,并初始化工具類  
  2. File input = new File("books.xml");   
  3. Digester digester = new Digester();   
  4.  
  5. // 如果碰到了 <books> 這個標簽,應該初始化 test.myBean.Books 這個 JavaBean 并填裝相關內容  
  6. digester.addObjectCreate("books""test.myBean.Books");   
  7. digester.addSetProperties("books");   
  8. // 如果碰到了 <books/book> 這個標簽,同上初始化 test.myBean.Book 這個 JavaBean   
  9. digester.addObjectCreate("books/book""test.myBean.Book");   
  10. digester.addSetProperties("books/book");   
  11. // 通過調用上面已經初始化過的 JavaBean 的 addBook() 方法來把多個 <books/book> 加到一個集合中  
  12. digester.addSetNext("books/book""addBook""test.myBean.Book");   
  13.  
  14. // 定義好了上面的解析規則后,就可以開始進行解析工作了  
  15. Books books = (Books) digester.parse(input);  

上述代碼簡單的向讀者展示了 Digester 處理 XML 的一些要點,主要是說明了一些模式以及規則的匹配。 簡言之,Digester 就是一種用來把一個 XML 轉化為一個與該 XML 結構類似的 JavaBean。你可以把 XML 根元素想象成一個 JavaBean, 該根元素的 attribute 就是這個 JavaBean 的各種 Field,當該根元素有其他子 tag 時,又要把這個子 tag 想象成一個個新的 XML,將其視為一個新的 JavaBean, 并作為一個 Field 加入到父 Bean 當中,然后以此類推,通過循環的方式將整個 XML 進行解析。

結束語

本文介紹了 Java 解析 XML 的三種常用技術,其中 DOM 易于上手,程序易于理解,但缺點在于占用內存大,不適合于解析較大的 XML 文件; SAX 基于事件模型占用系統資源少,能夠勝任較大的 XML 文件解析,但解析過程較為繁瑣查找元素不方便; Digester/JAXB 基于上述兩種技術衍生而來。文中的實例向讀者展示了三種 API 的基本使用方法, 在實際開發過程中使用那種技術解析 XML 更好要依據各自的優缺點視具體情況而定。

原文鏈接:http://www.ibm.com/developerworks/cn/xml/dm-1208gub/index.html

【編輯推薦】

  1. JSON真的比XML好很多嗎?
  2. 談談對象和XML文件的轉換
  3. 利用 JDBC 將數據提取到 XML 之中
  4. 面試體驗:Microsoft 篇
  5. 面試體驗:Google篇

 

責任編輯:張偉 來源: IBM
相關推薦

2012-08-15 10:44:07

JavaXML

2010-04-20 12:00:01

負載均衡技術

2009-09-22 12:39:04

2023-04-13 07:41:14

RoCE技術RDMA

2009-08-04 09:09:56

Java常見異常

2012-05-31 09:50:26

開源CMS

2018-03-06 14:44:59

2020-11-01 17:10:46

異步事件開發前端

2019-04-15 13:52:18

微服務配置中心Apollo

2019-11-04 08:38:45

分布式事務主流TCC

2020-11-03 19:52:54

Java數組編程語言

2010-07-05 18:32:25

2020-12-28 10:35:38

前端數據技術

2012-08-07 10:02:06

JSP

2021-11-23 10:30:35

Android技術代碼

2010-04-14 17:38:41

Oracle數據庫

2009-06-09 16:53:22

Java Swing處理方法比較

2010-03-01 15:21:57

WCF死鎖

2011-01-18 15:35:59

jQueryJavaScriptweb

2011-07-22 17:22:20

Spring
點贊
收藏

51CTO技術棧公眾號

欧美精品一区二区三区中文字幕| 调教一区二区| 美女视频网站久久| 九九热精品在线| 中文字幕a在线观看| 欧美理论影院| 亚洲男人天堂av| 久久综合婷婷综合| 夜夜骚av一区二区三区| 亚洲大片av| 在线播放国产一区二区三区| 日本泡妞xxxx免费视频软件| 玛雅亚洲电影| 亚洲一区二区三区四区五区黄| 欧美不卡1区2区3区| 国产伦理一区二区| 首页欧美精品中文字幕| 欧美国产精品人人做人人爱| 色欲狠狠躁天天躁无码中文字幕 | 伊人婷婷欧美激情| 欧洲成人一区二区| 欧美一级特黄aaaaaa大片在线观看| 美女精品网站| 久久久久久中文字幕| 亚洲图片第一页| 亚洲精品蜜桃乱晃| 精品日产卡一卡二卡麻豆| 日本特黄a级片| 妞干网免费在线视频| 亚洲精品伦理在线| 一道精品一区二区三区| 毛片网站在线| 99国产欧美久久久精品| 成人av资源网| 999久久久久久| 麻豆久久一区二区| 国产精品久在线观看| 亚洲日本韩国在线| 欧美视频不卡| 欧美激情精品在线 | 亚洲综合网站在线观看| 一区二区三区久久网| 国产中文字幕在线播放| 久久午夜电影网| 久久精品成人一区二区三区蜜臀 | 亚洲天堂久久av| a视频免费观看| 久久久久影视| 亚洲激情久久久| a天堂视频在线观看| 久久综合另类图片小说| 337p日本欧洲亚洲大胆精品| 91人妻一区二区| youjizzjizz亚洲| 精品国偷自产国产一区| 日本精品一二三| 成人av激情人伦小说| 精品国产一二三区| 中文字幕在线播放视频| 日韩激情网站| 亚洲日本中文字幕免费在线不卡| 亚洲av无码一区二区二三区| 免费观看久久av| 一区二区三区视频观看| 美女100%露胸无遮挡| 日韩不卡一区| 久久国产精品99国产精| 国产精品老熟女一区二区| 国产精品红桃| 欧美在线免费视频| 青青草视频在线观看免费| 日韩电影在线一区二区三区| 国产欧美一区二区三区久久| 国产美女精品视频国产| 国产精品88av| 九九久久99| 99视频在线观看地址| 亚洲欧美国产毛片在线| 国产欧美日韩小视频| 伊人网在线播放| 欧美日韩精品一区二区在线播放| 日本一区二区三区在线免费观看| 韩国精品福利一区二区三区| 亚洲欧美日韩高清| 操她视频在线观看| 亚洲国产一区二区精品专区| 国产成人精品综合| 99久久国产热无码精品免费| 丁香婷婷综合网| 日韩欧美一区二区三区久久婷婷| 国产原创在线观看| 偷窥少妇高潮呻吟av久久免费| 成人黄色一区二区| 日韩在线视频一区二区三区| 精品一区二区三区电影| 一级黄色片日本| 日韩香蕉视频| 成人免费xxxxx在线观看| 欧美熟妇另类久久久久久不卡| 久久亚洲私人国产精品va媚药| 一区二区在线观看网站| 美女视频在线免费| 欧美一级电影网站| 日本一级免费视频| 韩日在线一区| 国产原创欧美精品| 少妇高潮一区二区三区69| 亚洲欧洲日产国产综合网| 国产精品后入内射日本在线观看| 久久天堂影院| 亚洲欧美综合另类中字| 久久久久亚洲av无码专区| 久久午夜视频| 国产尤物99| 成人福利片网站| 日本黄色一区二区| 国产精品扒开腿做爽爽爽a片唱戏| 久久国产成人午夜av影院宅| 2023亚洲男人天堂| 不卡视频在线播放| 亚洲视频在线一区观看| 亚洲最大综合网| 久久夜色电影| 欧美激情一二三| 国产又粗又猛又爽又黄视频| 久久精品人人做人人爽97| 人妻少妇精品无码专区二区| 日韩一区二区三区精品| 乱亲女秽乱长久久久| 成人黄色片在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美乱做爰xxxⅹ久久久| 91精品视频一区二区| 中文字幕亚洲专区| 天堂网一区二区| 久久久久国产一区二区三区四区 | 欧美亚洲日本精品| 精品国产三级电影在线观看| 欧美片一区二区| 国产精品一区二区视频| 亚洲第一精品区| 四虎成人精品一区二区免费网站| 中文国产亚洲喷潮| 在线观看国产区| 国产精品素人视频| 日本黄大片一区二区三区| 日韩一区二区三区免费播放| 国产精品久久久久久久久免费| 黄色影院在线播放| 91福利视频在线| 亚洲精品国产熟女久久久| 久久综合激情| 亚洲 日韩 国产第一区| 国产麻豆一区| 免费不卡在线观看av| 国产草草影院ccyycom| 一区二区三区视频在线看| 中文字幕乱妇无码av在线| 欧美在线影院| 狠狠色狠狠色综合人人| 一本大道色婷婷在线| 一区二区亚洲欧洲国产日韩| 亚洲综合精品视频| 亚洲日本乱码在线观看| 亚洲精品一区二区18漫画| 在线成人av| 欧美另类视频在线| 欧美成人福利| 久久99国产综合精品女同| 亚洲乱码在线观看| 精品国产精品自拍| 国产精品美女高潮无套 | 国产a√精品区二区三区四区| 欧美伊人久久| 久久久一本精品99久久精品66| 日韩精品一区二区三区| www.xxxx精品| 欧美视频xxx| 91福利视频在线| 激情四射综合网| 日韩欧美一区二区三区免费观看 | 色综合久久88色综合天天看泰| 国产片高清在线观看| 亚洲伦在线观看| 日本黄色录像片| 蜜桃视频第一区免费观看| 欧美少妇在线观看| 婷婷精品在线观看| 91精品啪在线观看麻豆免费| 鲁鲁在线中文| 日韩在线播放视频| 五月婷婷深深爱| 欧美裸体bbwbbwbbw| 国产无码精品视频| 国产精品国产三级国产有无不卡| 熟妇高潮一区二区| 免费的成人av| 欧洲精品一区二区三区久久| 日韩伦理视频| 久久99精品久久久久久三级| 91精品网站在线观看| 欧美最猛性xxxxx(亚洲精品)| 精品国产白色丝袜高跟鞋| 亚洲老头同性xxxxx| www.中文字幕| 欧美区一区二区三区| 日本天堂网在线| 亚洲一区在线播放| 国内毛片毛片毛片毛片毛片| 91亚洲国产成人精品一区二区三| 免费网站在线观看黄| 久久婷婷亚洲| 欧美日韩在线一| 欧美搞黄网站| 中文字幕一区综合| 激情婷婷综合| 裸体丰满少妇做受久久99精品| 亚洲精品一区二区三区中文字幕| 国产欧美一区二区三区视频| 国产精品粉嫩| 96精品视频在线| 欧美性video| 久久香蕉国产线看观看av| 岛国视频免费在线观看| 亚洲精品成人网| 人妻一区二区三区四区| 日韩午夜激情av| 国产熟女一区二区丰满| 色先锋aa成人| 伊人成年综合网| 福利一区视频在线观看| 日本熟妇毛耸耸xxxxxx| 亚洲一区二区三区四区不卡| 免费在线一级片| 一区二区三区免费| 欧美又粗又大又长| 伊人色综合久久天天| 乱h高h女3p含苞待放| 国产精品第四页| 日韩精品一区二区三区在线视频| 中文子幕无线码一区tr| 日本美女bbw| 国产精品毛片高清在线完整版 | 亚洲欧美激情视频在线观看一区二区三区| 国产精品久久免费观看| 欧美激情一区二区在线| 日本美女bbw| 亚洲色图视频网站| www.av视频| 亚洲第一狼人社区| 日韩精品手机在线| 日韩人在线观看| 久久精品99北条麻妃| 欧美在线免费播放| 在线免费观看日韩视频| 91麻豆精品国产| 亚洲精品一级片| 精品视频久久久久久久| 风间由美一区| 久久精品最新地址| 午夜在线激情影院| 91大神在线播放精品| 日韩电影网站| 亚洲一区国产精品| www国产精品| 日韩国产高清一区| 亚洲视频电影在线| 僵尸世界大战2 在线播放| 国产美女一区| 欧美美女一级片| 国产成人精品综合在线观看| 中文字幕免费高清视频| 久久久噜噜噜久久中文字幕色伊伊| 永久免费av无码网站性色av| 国产精品二区一区二区aⅴ污介绍| 欧美日韩精品亚洲精品| 精品成人乱色一区二区| 伊人精品一区二区三区| 欧美一级欧美一级在线播放| 天天射天天色天天干| 中文字幕av一区二区| 超碰97国产精品人人cao| 日韩av电影院| 视频精品一区二区三区| 免费影院在线观看一区 | 极品粉嫩国产18尤物| 日韩成人伦理电影在线观看| 激情小说欧美色图| 国产色综合久久| 久久中文字幕无码| 欧美系列亚洲系列| 韩国av电影在线观看| 在线成人中文字幕| av资源在线| 亚洲aa中文字幕| 国产亚洲一卡2卡3卡4卡新区 | 亚洲一区观看| 五月六月丁香婷婷| 久久午夜免费电影| 免费中文字幕视频| 欧美日韩国产一级二级| 深夜福利视频在线观看| 欧美精品性视频| 欧美成人三级| 欧美激情专区| 一区久久精品| 手机在线视频一区| 欧美国产乱子伦| 久久精品一二区| 欧美成人午夜电影| 国产原创精品视频| 国产精品免费久久久久久| 米奇精品关键词| 激情五月六月婷婷| 精品一区二区av| 少妇一级黄色片| 欧美性猛交99久久久久99按摩| 超碰在线播放97| 久久婷婷国产麻豆91天堂 | 97久久夜色精品国产九色| 欧美中文一区二区| 妺妺窝人体色www在线小说| 国产成人在线电影| www.超碰在线观看| 欧美挠脚心视频网站| 国产福利片在线| 国产极品jizzhd欧美| 西野翔中文久久精品国产| 成年人午夜视频在线观看| 国产成人免费高清| 国产极品国产极品| 欧美一区二区在线视频| 日本在线免费网| 国产精品一区二区三区毛片淫片 | 久久免费视频66| 中国丰满熟妇xxxx性| 高潮精品一区videoshd| 久久久久久久久99| 日韩精品一区二区三区三区免费| 搞黄网站在线观看| 亚洲综合最新在线| 在线中文一区| 精品人妻一区二区乱码| 一区二区久久久久久| 亚洲av少妇一区二区在线观看| 欧美日韩电影在线观看| 香蕉大人久久国产成人av| 91视频 - 88av| 成人教育av在线| 欧美福利视频一区二区| 精品视频偷偷看在线观看| 欧美电影免费观看| 神马影院一区二区| 久久国产精品区| 看片网站在线观看| 亚洲第一国产精品| 久久男人天堂| 亚洲电影一二三区| 国产在线播放一区三区四| 91精品国产高清一区二区三蜜臀| 欧美电视剧在线看免费| 老色鬼在线视频| 四虎一区二区| 国产一区二区h| 日韩精品在线免费看| 亚洲网站视频福利| 亚洲欧美专区| 日本a在线免费观看| 久久麻豆一区二区| 在线观看毛片网站| 欧美精品情趣视频| 日本福利一区| av中文字幕网址| 亚洲国产精品尤物yw在线观看| 天天操天天舔天天干| 国产精品美女主播在线观看纯欲| 亚洲国产精品久久久久蝴蝶传媒| 又大又长粗又爽又黄少妇视频| 婷婷丁香久久五月婷婷| 91在线看黄| 国产美女精品久久久| 日本少妇一区二区| 久草视频在线资源| 亚洲色图欧美制服丝袜另类第一页| 香蕉久久一区| 欧美在线观看成人| 中文字幕一区二区三区蜜月| 日韩中文字幕观看| 国产精品入口免费视| 亚洲国产日本| 小泽玛利亚一区二区免费| 亚洲精品狠狠操| 国产精品99久久免费| 黄色高清无遮挡| 一区二区三区视频在线看| 国产视频第一区| 精品蜜桃一区二区三区| 老司机午夜精品| 亚洲自拍一区在线观看| 久久99精品国产99久久6尤物|