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

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

開發 后端 企業動態
XML (eXtensible Markup Language) 意為可擴展標記語言,它已經是軟件開發行業中大多數程序員和廠商用以選擇作為數據傳輸的載體。本文作者對于 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 需求。

應用示例

下面給出一段用于解析的 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 文件。

#p#

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 更好要依據各自的優缺點視具體情況而定。

原文出處:IBM developerWorks 

責任編輯:林師授 來源: IBM developerWorks
相關推薦

2012-08-14 13:30:00

XML

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技術棧公眾號

欧美成人性生活| 亚洲444eee在线观看| 91九色单男在线观看| 欧美精品久久久久性色| 大奶一区二区三区| 色猫猫国产区一区二在线视频| 日韩激情久久| 亚洲国产成人在线观看| 老色鬼久久亚洲一区二区| 精品国产拍在线观看| 三级视频网站在线观看| 97人人爽人人| 91在线导航| 国产成人一区二区精品非洲| 欧洲日本亚洲国产区| 99精品中文字幕| 老司机精品在线| 欧美高清性hdvideosex| 国产精品12345| 亚洲成a人v欧美综合天堂麻豆| 国产成人8x视频一区二区 | 一级黄色电影片| 成人在线视频播放| 精品成人久久av| 中文字幕av日韩精品| 欧洲伦理片一区 二区 三区| 久久er精品视频| 欧美日韩国产在线看| 俺去啦;欧美日韩| 欧美色图校园春色| xxxxx.日韩| 欧美日韩亚洲一区二区三区| 大片在线观看网站免费收看| 波多野结衣在线网站| 成年人网站91| 5g国产欧美日韩视频| 国产精品久久久久久久久夜色| 国产精品v亚洲精品v日韩精品| 最新国产精品亚洲| 日韩av在线看免费观看| 清纯唯美亚洲经典中文字幕| 日韩一级高清毛片| 亚洲午夜精品一区| 国产韩日精品| 色综合久久88色综合天天6 | 国产女主播一区二区| 国产成人精品亚洲精品色欲| 久久精品国产免费看久久精品| 国产97色在线| 日本高清久久一区二区三区| 一区二区视频免费| 日韩精品午夜视频| 欧洲中文字幕国产精品| 激情五月色婷婷| 精品99视频| 欧美激情国产日韩精品一区18| 一区二区成人免费视频| 91成人观看| 欧美成年人视频网站欧美| a一级免费视频| 91精品国产91久久久久久密臀 | www555久久| 亚洲欧美日韩国产另类专区| 中文字幕中文字幕一区三区| 国内精品久久久久国产| 成人免费视频在线观看| 在线观看欧美一区| 激情影院在线观看| 亚洲黄一区二区三区| 日韩在线视频在线| 久久青青色综合| 亚洲成av人片一区二区| 精品无码国产一区二区三区av| 免费av不卡在线观看| 午夜亚洲福利老司机| 色综合久久久久无码专区| 在线观看v片| 一本久久精品一区二区| 欧美一级特黄a| 亚瑟国产精品| 日韩免费一区二区| 最近日本中文字幕| 狠狠综合久久av一区二区蜜桃 | 香蕉成人在线视频| 欧美aⅴ99久久黑人专区| 久久久亚洲精品视频| 免费黄色网址在线| 青椒成人免费视频| 亚洲综合在线小说| 天天在线女人的天堂视频| 欧美激情综合在线| 日韩最新中文字幕| 国产精品一区二区日韩| 欧美三级韩国三级日本三斤| 青青草原播放器| 日本成人a网站| 深夜精品寂寞黄网站在线观看| 日韩女优一区二区| 久久影院亚洲| 91黄在线观看| 国产小视频福利在线| 韩国精品主播一区二区在线观看| 亚洲国产一区二区三区 | 日av在线不卡| 成人在线免费观看一区| 国模精品一区二区| 亚洲精品欧美在线| 女人另类性混交zo| 日本亚州欧洲精品不卡| 亚洲精品在线91| 午夜写真片福利电影网| 久久蜜桃精品| 国产精品国产精品| 在线免费看黄网站| 婷婷综合另类小说色区| 欧美又黄又嫩大片a级| 五月综合久久| 欧美第一黄色网| 亚洲一区精品在线观看| heyzo一本久久综合| 久久免费视频2| 韩日精品一区二区| 精品粉嫩超白一线天av| 九九热久久免费视频| 亚洲综合欧美| 成人在线观看网址| 国产cdts系列另类在线观看| 91福利国产精品| xxxxxx黄色| 国产精品magnet| 91精品久久久久久久久久久久久久| 亚洲av成人精品日韩在线播放| 亚洲狼人国产精品| 天天操狠狠操夜夜操| 国产精品一区二区三区av麻 | 午夜日韩成人影院| 亚洲精品电影网站| 久久中文字幕在线观看| 国模一区二区三区白浆| 亚洲国产一区二区精品视频| 三级在线观看视频| 亚洲精品短视频| 国产成人亚洲精品自产在线| 成人永久aaa| 色哟哟免费网站| 国产95亚洲| 久久久成人精品| 国产精品国产av| 最新国产成人在线观看| jizz欧美性11| 欧美成人自拍| 成人做爰www免费看视频网站| 91在线网址| 欧美美女一区二区在线观看| 91导航在线观看| 麻豆精品一区二区av白丝在线| 亚洲高清资源综合久久精品| 国产乱子精品一区二区在线观看| 在线看欧美日韩| 国产一区二区在线视频聊天| |精品福利一区二区三区| 亚洲av无日韩毛片久久| 欧美va天堂| 国产精品久久久久免费| 欧美调教sm| 原创国产精品91| 97人妻精品一区二区三区动漫| 亚洲精品高清在线观看| 扒开伸进免费视频| 免费看亚洲片| 一区二区精品国产| 国产一区二区三区免费观看在线 | 亚州一区二区| 国语自产在线不卡| 黄色在线视频观看网站| 精品视频在线免费观看| 亚洲最大的黄色网址| 国产成人精品影院| 国产免费成人在线| 欧美激情另类| 国产在线一区二区三区四区| 成人性生活视频| 日韩中文在线不卡| 国产美女三级无套内谢| 亚洲一区在线观看网站| 国产一级免费片| 奇米精品一区二区三区四区| 亚洲一区在线免费| 欧美一级片网址| 久青草国产97香蕉在线视频| 丰满人妻一区二区三区无码av| 婷婷国产v国产偷v亚洲高清| 97伦伦午夜电影理伦片| 日韩国产高清影视| 成年人三级视频| 国产区精品视频在线观看豆花| 18久久久久久| 免费成人av电影| 日韩欧美综合在线| 亚洲国产成人精品激情在线| 国产日韩高清在线| 中文字幕永久有效| 国产精品日本欧美一区二区三区| 日本视频一区二区不卡| 99热这里有精品| 77777少妇光屁股久久一区| 日本精品在线| 精品伦理精品一区| 国产一级精品毛片| 亚洲在线视频网站| 亚洲人与黑人屁股眼交| caoporen国产精品视频| 亚洲国产精品三区| 亚洲午夜极品| 国产高清免费在线| 免费精品国产| 99在线高清视频在线播放| 91精品韩国| 7m精品福利视频导航| 久久综合之合合综合久久| 亚洲黄色www网站| 91在线你懂的| 欧洲精品一区二区三区在线观看| 日日骚一区二区三区| 久久老女人爱爱| 国产精品一级无码| 狠狠色综合日日| 黑鬼大战白妞高潮喷白浆| 欧美二区视频| 亚洲乱码一区二区三区| 美女久久久久| 国产精品久久国产三级国电话系列| avav成人| 人体精品一二三区| 韩国美女久久| 久久久久久中文字幕| 69av亚洲| 亚洲午夜色婷婷在线| 色就是色亚洲色图| 精品国产亚洲在线| 97人妻一区二区精品免费视频 | 成人做爰视频www网站小优视频| 免费99精品国产自在在线| 国产中文字幕在线| 日韩黄色av网站| 亚洲精品国产精品国| 欧美肥妇毛茸茸| 在线观看国产黄| 欧洲视频一区二区| 亚洲系列第一页| 欧美三区在线视频| 亚洲 日本 欧美 中文幕| 色狠狠色噜噜噜综合网| 久久国产黄色片| 懂色av一区二区三区| 好吊操这里只有精品| 欧美日韩国产中字| 国产午夜精品无码一区二区| 亚洲午夜电影网| 久久综合久久鬼| 精品日本高清在线播放| 国产成人无码精品久在线观看 | 特级西西444www大胆免费看| 日本韩国欧美一区| 无码免费一区二区三区| 日本福利一区二区| 91欧美日韩麻豆精品| 欧美久久久久久久久中文字幕| 久久精品99北条麻妃| 婷婷中文字幕一区三区| 欧美一区二区三区久久久| 色久综合一二码| 日本欧美www| 日韩一区二区三区三四区视频在线观看| 国产美女永久免费| 日韩女优电影在线观看| 欧洲成人一区二区三区| 亚洲视频日韩精品| 一区二区三区视频网站| 久久这里有精品| 男女在线观看视频| 97在线视频免费观看| 欧美电影h版| 国产精品视频区| 国偷自产av一区二区三区| 精品免费二区三区三区高中清不卡 | 亚洲一级片免费观看| 大陆成人av片| 在线观看国产精品一区| 国产精品久久久久一区| 日本高清一二三区| 亚洲综合丝袜美腿| 波多野结衣一区二区三区四区| 欧美日韩一级视频| 亚洲第九十九页| 国产一区二区激情| 在线中文字幕视频观看| 国产91成人在在线播放| 777午夜精品电影免费看| 99免费在线观看视频| 香蕉久久精品| 91手机视频在线| 久久亚洲不卡| 午夜影院免费版| 久久久午夜电影| 国产黄色片在线| 懂色av影视一区二区三区| 国产精品成人无码| 精品久久久久久久久久久院品网 | 中文字幕区一区二区三| 中文字幕一区二区视频| 蜜乳av中文字幕| 亚洲欧美国产三级| 国产精品va无码一区二区三区| 欧美日韩一本到| а√中文在线资源库| 自拍偷拍亚洲一区| 日本三级一区| 亚洲综合色av| 久久久久久久久99精品大| 东京热加勒比无码少妇| 国产乱子伦视频一区二区三区 | 131美女爱做视频| 另类人妖一区二区av| 免费看毛片的网站| 国产精品久久久久9999吃药| 麻豆精品久久久久久久99蜜桃| 日韩一区二区视频| 欧美13一16娇小xxxx| 国产国产精品人在线视| 日韩欧美影院| 99热这里只有精品7| 久久69国产一区二区蜜臀| 熟女俱乐部一区二区| 午夜精品一区二区三区电影天堂 | 好吊一区二区三区| 狠狠热免费视频| 国产视频在线观看一区二区三区 | 伊人狠狠色j香婷婷综合| 成年人三级黄色片| 18欧美亚洲精品| 中文字字幕在线观看| 国产亚洲精品va在线观看| 成人免费网站观看| 91久久伊人青青碰碰婷婷| 99久久99视频只有精品| 欧美大片久久久| **性色生活片久久毛片| 中文在线资源天堂| 久久久国产成人精品| 四虎国产精品永久在线国在线 | 九色在线观看| 国产成人激情视频| 九九综合久久| 狠狠爱免费视频| 日本一区二区动态图| 午夜久久久久久久久久影院| 337p亚洲精品色噜噜狠狠| 97影院秋霞午夜在线观看| 亚洲一区久久久| 午夜精品久久久久99热蜜桃导演| 91小视频在线播放| 亚洲网友自拍偷拍| 国产18精品乱码免费看| 久久亚洲欧美日韩精品专区| 欧美午夜网站| 丰满的少妇愉情hd高清果冻传媒 | 成人免费淫片aa视频免费| 91精品一区二区三区综合在线爱| 九九热精品国产| 伊人一区二区三区| 天天干视频在线观看| 欧美与黑人午夜性猛交久久久| 妖精视频一区二区三区免费观看| 97公开免费视频| 亚洲欧洲另类国产综合| 国产同性人妖ts口直男| 69视频在线播放| 欧美日韩性在线观看| 日韩欧美国产片| 亚洲国产一二三| 日本人妖在线| 欧洲精品在线视频| 91精品一区国产高清在线gif | 久久爱91午夜羞羞| 亚洲天堂电影网| 国产经典欧美精品| 国产成人无码精品亚洲| 日韩中文字幕久久| 日韩免费一级| 欧美色图另类小说| 亚洲欧洲三级电影| 国产91免费看| 国产精品久久久久久av下载红粉 | 久久久精品一区二区三区| 日韩精品三级| 亚洲中文字幕无码不卡电影| 亚洲青青青在线视频| 天天干天天色天天| 国产日韩av在线|