日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁(yè) > 編程 > Java > 正文

深入XPath的詳解以及Java示例代碼分析

2019-11-26 16:04:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
復(fù)制代碼 代碼如下:

import java.io.IOException;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class XpathTest {
 public static void main(String[] args) throws ParserConfigurationException,
   SAXException, IOException, XPathExpressionException {
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  factory.setNamespaceAware(false);
  DocumentBuilder builder = factory.newDocumentBuilder();
  Document doc = builder.parse("C:/Users/Administrator/Desktop/test.xml");
  System.out.println(doc.getChildNodes().getLength());
  XPathFactory xFactory = XPathFactory.newInstance();
  XPath xpath = xFactory.newXPath();
  XPathExpression expr = xpath
    .compile("http://name/text()");
  Object result = expr.evaluate(doc, XPathConstants.NODESET);
  NodeList nodes = (NodeList) result;
  System.out.println(nodes.getLength());
  for (int i = 0; i < nodes.getLength(); i++) {
   System.out.println(nodes.item(i).getNodeValue());
  }
 }
}

一、結(jié)點(diǎn)類型
XPath中有七種結(jié)點(diǎn)類型:元素、屬性、文本、命名空間、處理指令、注釋以及文檔節(jié)點(diǎn)(或成為根節(jié)點(diǎn))。 文檔的根節(jié)點(diǎn)即是文檔結(jié)點(diǎn);對(duì)應(yīng)屬性有屬性結(jié)點(diǎn),元素有元素結(jié)點(diǎn)。
二、常用路徑表達(dá)式
表達(dá)式 描述
nodename      選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)
/             從根節(jié)點(diǎn)選取
//  從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置
.   選取當(dāng)前節(jié)點(diǎn)
..    選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
@     選取屬性
例如有文檔:
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<bookstore> 
<book> 
  <title lang="eng">Harry Potter</title> 
  <price>29.99</price> 
</book> 
<book> 
  <title lang="eng">Learning XML</title> 
  <price>39.95</price> 
</book> 
</bookstore> 

則:
路徑表達(dá)式 結(jié)果
bookstore 選取 bookstore 元素的所有子節(jié)點(diǎn)
/bookstore 選取根元素 bookstore 注釋:假如路徑起始于正斜杠( / ),則此路徑始終代表到某元素的絕對(duì)路徑!
bookstore/book 選取所有屬于 bookstore 的子元素的 book 元素。
//book 選取所有 book 子元素,而不管它們?cè)谖臋n中的位置。
bookstore//book 選擇所有屬于 bookstore 元素的后代的 book 元素,而不管它們位于 bookstore 之下的什么位置。
//@lang 選取所有名為 lang 的屬性。
三、限定語(yǔ)
用來(lái)查找某個(gè)特定的節(jié)點(diǎn)或者包含某個(gè)指定的值的節(jié)點(diǎn)。以方括號(hào)括起。
例如:
路徑表達(dá)式 結(jié)果
/bookstore/book[1] 選取屬于 bookstore 子元素的第一個(gè) book 元素。
/bookstore/book[last()] 選取屬于 bookstore 子元素的最后一個(gè) book 元素。
/bookstore/book[last()-1] 選取屬于 bookstore 子元素的倒數(shù)第二個(gè) book 元素。
/bookstore/book[position()<3] 選取最前面的兩個(gè)屬于 bookstore 元素的子元素的 book 元素。
//title[@lang] 選取所有擁有名為 lang 的屬性的 title 元素。
//title[@lang='eng'] 選取所有 title 元素,且這些元素?fù)碛兄禐?eng 的 lang 屬性。
/bookstore/book[price>35.00] 選取所有 bookstore 元素的 book 元素,且其中的 price 元素的值須大于 35.00。
/bookstore/book[price>35.00]/title 選取所有 bookstore 元素中的 book 元素的 title 元素,且其中的 price 元素的值須大于 35.00。
四、通配符
通配符 描述
* 匹配任何元素節(jié)點(diǎn)
@* 匹配任何屬性節(jié)點(diǎn)
node() 匹配任何類型的節(jié)點(diǎn)
|          選取若干路徑 
例如:
路徑表達(dá)式 結(jié)果
/bookstore/* 選取 bookstore 元素的所有子節(jié)點(diǎn)
//* 選取文檔中的所有元素
//title[@*] 選取所有帶有屬性的 title 元素。
//book/title | //book/price 選取所有 book 元素的 tilte 和 price 元素。
//title | //price 選取所有文檔中的 title 和 price 元素。
/bookstore/book/title | //price 選取所有屬于 bookstore 元素的 book 元素的 title 元素,以及文檔中所有的 price 元素。

五、函數(shù)
名稱 結(jié)果
ancestor 選取當(dāng)前節(jié)點(diǎn)的所有先輩(父、祖父等)
ancestor-or-self 選取當(dāng)前節(jié)點(diǎn)的所有先輩(父、祖父等)以及當(dāng)前節(jié)點(diǎn)本身
attribute 選取當(dāng)前節(jié)點(diǎn)的所有屬性
child 選取當(dāng)前節(jié)點(diǎn)的所有子元素。
descendant 選取當(dāng)前節(jié)點(diǎn)的所有后代元素(子、孫等)。
descendant-or-self 選取當(dāng)前節(jié)點(diǎn)的所有后代元素(子、孫等)以及當(dāng)前節(jié)點(diǎn)本身。
following 選取文檔中當(dāng)前節(jié)點(diǎn)的結(jié)束標(biāo)簽之后的所有節(jié)點(diǎn)。
namespace 選取當(dāng)前節(jié)點(diǎn)的所有命名空間節(jié)點(diǎn)
parent 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。
preceding 選取文檔中當(dāng)前節(jié)點(diǎn)的開(kāi)始標(biāo)簽之前的所有節(jié)點(diǎn)。
preceding-sibling 選取當(dāng)前節(jié)點(diǎn)之前的所有同級(jí)節(jié)點(diǎn)。
self 選取當(dāng)前節(jié)點(diǎn)。
路徑表達(dá)式可以是絕對(duì)路徑,也可以是相對(duì)路徑。例如:
絕對(duì)位置路徑:
/step/step/...相對(duì)位置路徑:
step/step/...其中的每一步又可以是一個(gè)表達(dá)式,包括:
軸(函數(shù))(axis)
定義所選節(jié)點(diǎn)與當(dāng)前節(jié)點(diǎn)之間的樹(shù)關(guān)系
節(jié)點(diǎn)測(cè)試(node-test)
識(shí)別某個(gè)軸內(nèi)部的節(jié)點(diǎn)
零個(gè)或者更多謂語(yǔ)(predicate)
更深入地提煉所選的節(jié)點(diǎn)集
例如: 例子 結(jié)果
child::book 選取所有屬于當(dāng)前節(jié)點(diǎn)的子元素的 book 節(jié)點(diǎn)
attribute::lang 選取當(dāng)前節(jié)點(diǎn)的 lang 屬性
child::* 選取當(dāng)前節(jié)點(diǎn)的所有子元素
attribute::* 選取當(dāng)前節(jié)點(diǎn)的所有屬性
child::text() 選取當(dāng)前節(jié)點(diǎn)的所有文本子節(jié)點(diǎn)
child::node() 選取當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)
descendant::book 選取當(dāng)前節(jié)點(diǎn)的所有 book 后代
ancestor::book 選擇當(dāng)前節(jié)點(diǎn)的所有 book 先輩
ancestor-or-self::book 選取當(dāng)前節(jié)點(diǎn)的所有book先輩以及當(dāng)前節(jié)點(diǎn)(假如此節(jié)點(diǎn)是book節(jié)點(diǎn)的話)
child::*/child::price 選取當(dāng)前節(jié)點(diǎn)的所有 price 孫。
六、運(yùn)算符
運(yùn)算符 描述 實(shí)例 返回值
| 計(jì)算兩個(gè)節(jié)點(diǎn)集 //book | //cd 返回所有帶有 book 和 ck 元素的節(jié)點(diǎn)集
+ 加法 6 + 4 10
- 減法 6 - 4 2
* 乘法 6 * 4 24
div 除法 8 div 4 2
= 等于 price=9.80 如果 price 是9.80,則返回 true。 如果 price 是9.90,則返回 fasle。
!= 不等于 price!=9.80 如果 price 是 9.90,則返回 true。 如果 price 是 9.98,則返回 fasle。
< 小于 price<9.80 如果price是9.00,則返回true 如果price是9.98,則返回fasle
<= 小于或等于 price<=9.80 如果 price 是9.00,則返回 true。 如果 price 是9.90,則返回 fasle。
> 大于 price>9.80 如果 price 是 9.90,則返回 true。 如果 price 是 9.80,則返回 fasle。
>= 大于或等于 price>=9.80 如果 price 是 9.90,則返回 true。 如果 price 是 9.70,則返回 fasle。
or 或 price=9.80 or price=9.70 如果 price 是 9.80,則返回 true。 如果 price 是 9.50,則返回 fasle。
and 與 price>9.00 and price<9.90 如果 price 是 9.80,則返回 true。 如果 price 是 8.50,則返回 fasle。
mod 計(jì)算除法的余數(shù) 5 mod 2 1

七、在Java中使用Xpath
在java1.5中推出了一個(gè)javax.xml.xpath包專門(mén)用來(lái)在java中使用Xpath表達(dá)式來(lái)讀取xml。1. 數(shù)據(jù)類型
在學(xué)習(xí)之前首先需要注意的是:Xpath的數(shù)據(jù)并不與Java有一一對(duì)應(yīng)關(guān)系,Xpath1.0只聲明了四種數(shù)據(jù)類型:
•node-set
•number
•boolean
•string

對(duì)應(yīng)到j(luò)ava就是:
•number 映射為 java.lang.Double
•string 映射為 java.lang.String
•boolean 映射為 java.lang.Boolean
•node-set 映射為 org.w3c.dom.NodeList

因此,在使用java的xpathAPI時(shí),需要注意返回類型:
Java代碼
復(fù)制代碼 代碼如下:

public Object evaluate(Object item, QName returnType)throws XPathExpressionException;   

public String evaluate(Object item)throws XPathExpressionException;   

public Object evaluate(InputSource source, QName returnType)throws XPathExpressionException;   

public String evaluate(InputSource source)throws XPathExpressionException;

復(fù)制代碼 代碼如下:

public Object evaluate(Object item, QName returnType)throws XPathExpressionException; 

public String evaluate(Object item)throws XPathExpressionException; 

public Object evaluate(InputSource source, QName returnType)throws XPathExpressionException; 

public String evaluate(InputSource source)throws XPathExpressionException; 

不指定返回類型時(shí),缺省返回類型為String。指定返回類型時(shí),需要把返回值由Object類型強(qiáng)制轉(zhuǎn)換成對(duì)應(yīng)的返回類型。 
 API的使用
類似于Dom,要得到一個(gè)Xpath對(duì)象,可以如下使用: Java代碼
復(fù)制代碼 代碼如下:

XPathFactory factory = XPathFactory.newInstance();   
XPath xpath = factory.newXPath();   
XPathExpression expression = xpath.compile("/bookstore//book/title/text()");

復(fù)制代碼 代碼如下:

<strong><strong>        XPathFactory factory = XPathFactory.newInstance(); 
        XPath xpath = factory.newXPath(); 
        XPathExpression expression = xpath.compile("/bookstore//book/title/text()");</strong></strong> 

還是以之前的xml文檔為例。要得到這個(gè)表達(dá)式的結(jié)果,我們先要得到一個(gè)輸入對(duì)象,例如一個(gè)document:
復(fù)制代碼 代碼如下:

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();   
DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();   
Document document = documentBuilder.parse(new File("books.xml"));   
NodeList list = (NodeList) expression.evaluate(document,XPathConstants.NODESET);   

復(fù)制代碼 代碼如下:

<strong><strong>        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder(); 
        Document document = documentBuilder.parse(new File("books.xml")); 
        NodeList list = (NodeList) expression.evaluate(document,XPathConstants.NODESET);</strong></strong> 

這里可以看出,在使用Xpath的時(shí)候,我們好像需要很清楚的知道返回結(jié)果是什么。否則就不能得到意想的結(jié)果。
最后,我們得到一個(gè)title的list值:
復(fù)制代碼 代碼如下:

for(int i = 0;i<list.getLength();i++){                System.out.println(list.item(i).getNodeValue());   


復(fù)制代碼 代碼如下:

<strong><strong>        for(int i = 0;i</strong></strong> 

復(fù)制代碼 代碼如下:

Everyday Italian 
Harry Potter 
XQuery Kick Start 
Learning XML 

復(fù)制代碼 代碼如下:

<strong><strong>Everyday Italian 
Harry Potter 
XQuery Kick Start 
Learning XML</strong></strong> 

八、處理命令空間一般一個(gè)規(guī)范xml都會(huì)有命名空間的定義,例如:
復(fù)制代碼 代碼如下:

<strong><strong> 

           
            Hello 

</strong></strong> 

復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="UTF-8"?>   
<tg:bookstore xmlns:tg="http://www.tibco.com/cdc/liugang"   
           xmlns:ns="http://www.tibco.com/cdc/liugang/ns">   
          <ns:book>   
            <tg:title>Hello</tg:title>   
          </ns:book>   
</tg:bookstore> 

xpath中定義了與節(jié)點(diǎn)名和命名空間有關(guān)的三個(gè)函數(shù):
•local-name()
•namespace-uri()
•name()
例如要查找所有在當(dāng)前文檔中定義的,元素的local名為book的結(jié)點(diǎn),則如下:
復(fù)制代碼 代碼如下:

XPathFactory xPathFactory = XPathFactory.newInstance();   
XPath xpath = xPathFactory.newXPath();   
XPathExpression compile = xpath.compile("http://*[local-name()='book']");   
NodeList list = (NodeList) compile.evaluate(document,XPathConstants.NODESET);   

復(fù)制代碼 代碼如下:

<strong><strong>        XPathFactory xPathFactory = XPathFactory.newInstance(); 
        XPath xpath = xPathFactory.newXPath(); 
        XPathExpression compile = xpath.compile("http://*[local-name()='book']"); 
        NodeList list = (NodeList) compile.evaluate(document,XPathConstants.NODESET);</strong></strong>

如果元素定義了命名空間,則使用xpath查找時(shí)也必須指定在同一個(gè)命名空間中,即便元素使用的是缺省的命名空間,剛查找也需要定義缺省的命名空間。 例如文檔:
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="UTF-8"?>   
<bookstore xmlns="http://www.tibco.com/cdc/liugang" xmlns:tg="http://www.tibco.com/cdc/liugang/tg"   
           xmlns:ns="http://www.tibco.com/cdc/liugang/ns">   
          <ns:book>   
            <tg:title>Hello</tg:title>   
          </ns:book>   
          <computer>   
               <id>ElsIOIELdslke-1233</id>   
          </computer>   
</bookstore> 

復(fù)制代碼 代碼如下:

<strong><strong> 

           
            Hello 

           
               ElsIOIELdslke-1233 

</strong></strong> 

定義了三個(gè)命名空間:缺省的;xmlns:tg;xmlns:ns。 要使用命名空間,我們需要設(shè)置XPath的命名空間上下文:NamespaceContext。這是一個(gè)接口類型,我們需要自定義去實(shí)現(xiàn)它。例如對(duì)應(yīng)于上文檔的三個(gè)命名空間,可以如下實(shí)現(xiàn):
復(fù)制代碼 代碼如下:

class CustomNamespaceContext implements NamespaceContext{   

        public String getNamespaceURI(String prefix) {   
            if(prefix.equals("ns")){   
                return "http://www.tibco.com/cdc/liugang/ns";   
            }else if(prefix.equals("tg")){   
                return "http://www.tibco.com/cdc/liugang/tg";   
            }else if(prefix.equals("df")){   
                return "http://www.tibco.com/cdc/liugang";   
            }   
            return XMLConstants.NULL_NS_URI;   
        }   

        public String getPrefix(String namespaceURI) {   
            return null;   
        }   

        public Iterator getPrefixes(String namespaceURI) {   
            return null;   
        }   

    }   

復(fù)制代碼 代碼如下:

<strong><strong>class CustomNamespaceContext implements NamespaceContext{ 

        public String getNamespaceURI(String prefix) { 
            if(prefix.equals("ns")){ 
                return "http://www.tibco.com/cdc/liugang/ns"; 
            }else if(prefix.equals("tg")){ 
                return "http://www.tibco.com/cdc/liugang/tg"; 
            }else if(prefix.equals("df")){ 
                return "http://www.tibco.com/cdc/liugang"; 
            } 
            return XMLConstants.NULL_NS_URI; 
        } 

        public String getPrefix(String namespaceURI) { 
            return null; 
        } 

        public Iterator getPrefixes(String namespaceURI) { 
            return null; 
        } 

    }</strong></strong> 

方法名都非常直觀。這里只實(shí)現(xiàn)第一個(gè)方法。 這樣,如果要查找命名空間是缺省,元素名為computer的所有元素,可以如下實(shí)現(xiàn):
復(fù)制代碼 代碼如下:

XPathFactory xPathFactory = XPathFactory.newInstance();   
XPath xpath = xPathFactory.newXPath();   
xpath.setNamespaceContext(new CustomNamespaceContext());   
XPathExpression compile = xpath.compile("http://df:computer");   
NodeList list = (NodeList) compile.evaluate(document,XPathConstants.NODESET);   
for(int i = 0;i 
    Node item = list.item(i);   
    System.out.println(item.getNodeName()+"  "+item.getNodeValue());   
}   

復(fù)制代碼 代碼如下:

<strong><strong>        XPathFactory xPathFactory = XPathFactory.newInstance(); 
        XPath xpath = xPathFactory.newXPath(); 
        xpath.setNamespaceContext(new CustomNamespaceContext()); 
        XPathExpression compile = xpath.compile("http://df:computer"); 
        NodeList list = (NodeList) compile.evaluate(document,XPathConstants.NODESET); 
        for(int i = 0;i</strong></strong> 

九、其他
除此之外,在java中,還可以定義擴(kuò)展的函數(shù)解釋器和變量解釋器,看XPath的方法:
復(fù)制代碼 代碼如下:

    /** 
     * 
Establish a variable resolver.

     *  
     * 
A NullPointerException is thrown if resolver is null.

     *  
     * @param resolver Variable resolver. 
     *  
     *  @throws NullPointerException If resolver is null. 
     */   
    public void setXPathVariableResolver(XPathVariableResolver resolver);   

   
    /** 
       * 
Establish a function resolver.

       *  
       * 
A NullPointerException is thrown if resolver is null.

       *  
       * @param resolver XPath function resolver. 
       *  
       * @throws NullPointerException If resolver is null. 
       */   
    public void setXPathFunctionResolver(XPathFunctionResolver resolver);  

復(fù)制代碼 代碼如下:

<strong><strong>    /**
     * Establish a variable resolver.
     * 
     * A <code>NullPointerException</code> is thrown if <code>resolver</code> is <code>null</code>.
     * 
     * @param resolver Variable resolver.
     * 
     *  @throws NullPointerException If <code>resolver</code> is <code>null</code>.
     */ 
    public void setXPathVariableResolver(XPathVariableResolver resolver); 

 
    /**
       * Establish a function resolver.
       * 
       * A <code>NullPointerException</code> is thrown if <code>resolver</code> is <code>null</code>.
       * 
       * @param resolver XPath function resolver.
       * 
       * @throws NullPointerException If <code>resolver</code> is <code>null</code>.
       */ 
    public void setXPathFunctionResolver(XPathFunctionResolver resolver);</strong></strong> 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
91久久中文| 欧美日韩中文字幕视频| 国产视频中文字幕在线观看| 久久69成人| av首页在线| 在线一区二区不卡| 91精品视频国产| 欧美在线视频一区二区| 国产丝袜一区| 国产在线观看黄色| 91精品久久久久| 日韩欧美中文第一页| 91精品免费在线观看| 亚洲va中文字幕| 91精品久久久久久久久| 国产欧美日韩中文久久| 日韩精品在线观| 日韩欧美在线1卡| 国产一卡2卡3卡四卡网站| 久久精品一级爱片| 日韩中文字幕在线视频播放| 免费在线视频一级不卡| 国产欧美日韩视频| 久久婷婷综合国产| 欧美日韩精品在线播放| 国产黄在线观看免费观看不卡| 91精品国产色综合久久不卡蜜臀 | 免费视频二区| 国产三级做爰在线观看| 中文字幕精品视频在线| 欧美日韩国产不卡在线看| 免费精品国产自产拍在| 日韩亚洲欧美中文高清在线| 精品久久久91| 中文亚洲免费| 日韩在线不卡一区| 不卡av免费在线| 中文字幕五月天| 五月天久久比比资源色| 欧美一级在线免费| 日韩欧美国产高清| 国产区高清在线| 欧美在线视频二区| 国产在线观看色| 中文字幕在线观看亚洲| 999视频精品| 精品久久久久久无| 亚洲 欧美 中文字幕| 日韩区欧美区| 高清不卡一区二区| 国产95在线|亚洲| 日韩精品视频在线观看免费| 欧美日韩中文在线| 亚洲高清视频在线| 97国产视频| 欧美亚洲另类制服自拍| 欧美大片在线观看一区| 亚洲精品欧美二区三区中文字幕 | 精品三级在线| 久久99久久久久久久噜噜| 日韩精品―中文字幕| 一二三区精品视频| 日韩中文字幕第一页| 欧美精品一区二区三区在线播放| 欧美日韩精品在线观看| 久久99蜜桃精品| 日韩在线视频二区| 中文字幕日韩欧美在线视频| 色一区在线观看| 日韩精品在线看| 在线黄色国产电影| 精品熟女一区二区三区| 亚洲高清不卡一区| 欧美二三四区| 精品久久久视频| 国产日韩在线视频| 亚洲一级影院| 日韩在线视频一区二区三区| 最新中文字幕在线| av一卡二卡| 久久久精品网| 欧美婷婷久久| 天堂在线中文| 精品久久久91| 欧美日韩国产不卡| 国产1卡2卡三卡四卡网站| a√免费观看在线网址www| 亚洲免费播放| 日韩精品在线免费观看视频| 欧美日韩高清在线一区| 日韩精品一二三四区| 在线视频国产三级| 国产高清在线视频| 日韩一级视频在线观看| 日韩欧美中文字幕精品| 一级片免费在线| 日韩免费视频一区二区| 中文天堂在线一区| 亚洲专区一二三| 精品日韩视频在线观看| 日韩av一区二| 一区二区三区在线免费| 日本亚洲视频在线| 91精品视频观看| 国产欧美日韩不卡| 成片免费观看| 国产在线第一页| 日韩欧美综合在线视频| 国产午夜精品一区二区三区视频| 中文字幕在线欧美| 欧美中文字幕精品| 欧美日韩不卡在线视频| 中文字幕在线观看国产| 国产精品一区二三区| 一级免费a一片| 一区二区精品免费| 日韩精品免费视频一区二区三区| 国产日韩专区| 日韩中文字幕在线视频播放| 日韩av一区二| 92久久精品| 91精品国产丝袜白色高跟鞋| 尤物在线精品| 香蕉视频亚洲一级| 亚洲免费婷婷| 日韩免费精品视频| 91精品国产欧美日韩| 欧美日韩一级视频| 国产黄色在线看| 欧美日韩国产高清| 日韩国产在线不卡视频| 亚洲va中文字幕| 久久精品一二三| 在线欧美日韩精品| 欧美日韩中文字幕一区| 欧美日韩在线看| 欧美日韩精品久久久| 欧美一级日韩不卡播放免费| 中文字幕日韩欧美在线视频| 国产午夜精品视频免费不卡69堂| 午夜一区二区三区视频| 91精品国产91| 日韩精品免费视频一区二区三区| 亚洲一区在线观看视频| 日韩精品欧美在线| 欧美啪啪一区| 蜜桃视频中文字幕| 福利在线国产| 韩国av一区二区| 粉嫩喷白浆久久| 亚洲日本精品视频| 欧美亚洲免费高清在线观看| 久久精品99久久久久久久久| 日韩精品手机在线| 97久久精品| 99久热re在线精彩视频| 久久视频www| 中文天堂资源在线| av免费在线不卡| 国产一级在线播放| 国产高清在线视频| 国产一区不卡精品| av免费在线不卡| 伊人网站在线| 欧美日韩国产高清| 一级免费a一片| 亚洲图片小说综合| 欧美日韩亚洲第一| 精品在线网站观看| 99视频在线看| 国产网站欧美日韩免费精品在线观看| 日韩精品在线看| 日本精品二区| 黄色国产在线| 日韩欧美国产午夜精品| 国产视频一区三区| 中文字幕在线精品| 国产一级一片免费播放| 91精品在线免费| 国产黄色高清在线| 国精品产品一区| 精品一二三四区| 欧美日韩中文字幕综合视频 | 91精品国产免费| 精品亚洲国内自在自线福利| 中文在线一区二区| 国产高清大尺度一区二区不卡| 精品久久久91| 日韩av中文字幕一区| 日本熟女一区二区| 国产偷国产偷亚洲清高网站 | av最新网址| 久久视频www| 中文字幕2020第一页| 精品视频三区| 日韩国产欧美亚洲| 日韩欧美国产高清91| 69av亚洲| 亚洲.国产.中文慕字在线| 日本黄色一区二区三区| 中文字幕精品在线| 欧美日韩视频免费| 国产久卡久卡久卡久卡视频精品| 亚洲黄色片在线观看| 日韩在线小视频| 亚洲va久久久噜噜噜久久| 国精品产品一区| 日韩欧美一二三| 日韩三级视频在线看| 欧美一级免费看| 中文字幕中文字幕精品| www高清在线视频日韩欧美| 国产一区精品在线| 亚洲免费观看在线观看| 在线视频亚洲| 国产日韩专区| 在线国产91| 国产中文在线播放| 欧美久久综合性欧美| 国产乱国产乱300精品| 中文字幕日韩亚洲| 亚洲欧美中文字幕在线一区| 国产成人综合av| av中文网站| 中文字幕精品国产| 日韩午夜黄色| 欧美日韩夫妻久久| 中文字幕欧美日韩精品| 国产成人精品免费久久久久| 国产视频三级在线观看播放| 中文字幕视频在线观看| 欧美日韩中文字幕日韩欧美| 中文字幕在线亚洲| 99视频一区| 国产亚洲一区字幕| 中文字幕在线欧美| 欧美1234区| 在线观看区一区二| 亚洲经典中文字幕| 91久久在线| 一区免费在线| 国产福利免费观看| 亚洲欧美中文字幕| a√免费观看在线网址www| 欧美国产一级| 国产欧美一级| 国产h片在线观看| 91精品国产综合久久精品app| 7799精品视频天天看| 久久中文免费视频| 欧美日韩精品在线| 中文av字幕一区| 亚洲视频在线观看三级| 日韩三级视频在线看| 亚洲理论中文字幕| 国产婷婷在线观看| 91精品国产免费| 午夜少妇久久久久久久久| √天堂资源中文www| 欧美三级日韩三级国产三级| 伊人伊成久久人综合网小说| 久草视频观看| 欧美日韩综合在线观看| 欧美日韩精品综合| www中文字幕在线观看| aaa大片在线观看| 日韩欧美亚洲国产一区| 色一区在线观看| 在线视频你懂得一区| 欧美日韩国产一区中文午夜| 日韩精品欧美在线| 国产在线观看精品| 在线免费91| 欧美三级一区二区三区| 欧美三级免费观看| 色综合天天综合网国产成人综合天| 樱花草www在线观看| 日韩三级高清在线| 成人精品视频一区| 91精品国产综合久久久久久| 成人h视频在线观看| 91精品国产综合久久久久久| 日韩久久在线| 亚洲高清中文字幕| 欧美日韩中文另类| 欧美三级日韩在线| 日韩欧美在线网站| 天堂在线视频中文网| 国产在线导航| 欧美99久久| 99pao成人国产永久免费视频| 欧美三级在线播放| av免费看在线| 中文字幕成人乱码在线电影| 日韩精品在线视频| 国产在线播放一区二区| 日韩欧美亚洲视频| 中文精品视频| 国产免费永久在线观看| 欧美日韩国产中文精品字幕自在自线| 日本精品在线播放| 一区二区精品| a视频免费在线观看| 欧美日韩综合视频网址| 亚洲中午字幕| 欧美日韩成人一区| 国产 欧美在线| 亚洲免费在线视频一区 二区| 97视频在线| 国产午夜精品一区二区三区视频| 国产手机精品视频| 美日韩精品免费视频| 国产三级免费观看| 久久蜜桃一区二区| 欧美日韩在线播放视频| 亚洲一二三不卡| 国产乱码在线| 在线免费播放av| 日韩欧美中文字幕精品| 色综合天天性综合| 欧美一卡2卡3卡4卡| 最新中文字幕在线| 国产69精品久久久久孕妇国产69久久| 日韩在线视频免费观看| 中文精品在线| 久久中文精品| 欧美一级久久| 亚洲高清视频在线| 欧美三级免费观看| 91精品在线看V| 欧美日韩精品综合| 欧美日韩精品免费看| 日韩免费高清一区二区| 欧美日韩国产第一页| 国产 日韩 欧美 综合 一区| 国产一级在线| 蜜桃精品视频| 欧美日韩在线播放一区| 国产在线视频一区二区| 中文字幕在线观看亚洲| 久久综合久久综合九色| 国产欧美中文在线| 日韩av一区二| 福利一区二区| 91精品国产综合久久蜜臀| 欧美日韩一级视频| 国产在线二区| 在线中文字幕视频| 午夜少妇久久久久久久久| 国产不卡一区| 欧美日韩国产一区中文午夜| 日韩a一区二区| 91久久精品国产91性色69| 色猫猫国产区一区二在线视频| 日韩一级二级三级| 伊人伊成久久人综合网小说| 蜜臀国产一区| 久久香蕉一区| aaa免费看大片| 日韩精品在线视频观看| 97视频在线| 日本国产一区| 日韩欧美在线综合网| 日本不卡视频一区| 欧美亚洲天堂网| 国产亚洲福利| 日韩欧美在线中字| 欧美日韩国产综合视频在线观看中文| 日韩精品视频在线观看网址| 中文字幕在线观看视频www| www.狠狠| 久久麻豆视频| 欧美日韩国产区| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 99精品在线播放| 日韩高清不卡一区二区| 日韩中文在线视频| 国产一区激情在线| 国产成人一二三区| 日韩高清在线不卡| 久久香蕉一区| 欧美三级中文字幕| 亚洲大片精品永久免费| av中文在线播放| 人妻一区二区三区免费| 91精品国产欧美日韩| 国产一级视频| 国产成人精品综合网站| 色综合天天性综合| 欧美日韩国产中字| 亚洲欧洲在线观看av| 91精品啪在线观看国产60岁| 国产欧美日韩亚州综合| 欧美亚洲另类制服自拍| 国产不卡一区| 国产激情久久| 国产95在线|亚洲| a√免费观看在线网址www| 精品国产乱码久久久久久牛牛| 国产日韩av一区二区|