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

推薦幾款Xml解析工具,超好用!

開源
目前許多開源項目中大量采用 DOM4J,例如 Hibernate 框架中就用到 DOM4J 來讀取 XML 配置文件,連 Sun 的 JAXM 也在用 DOM4J。

01、簡介

XML,一種可擴展標記語言,通常被開發人員用來傳輸和存儲數據,定義也比較簡單,通常如下方式開頭,用來表述文檔的一些信息。

<?xml version="1.0" encoding="UTF-8"?>

例如下面這個簡單的文檔。

<?xml version="1.0" encoding="UTF-8"?>
<site>
  <name>博客網站</name>
  <url>https://www.pzblog.cn</url>
  <desc>技術學習網站</desc>
</site>

其中site、name、url、desc表示標簽名稱,內容表示標簽對應的值。

因 XML 的平臺無關性、語言無關性、系統無關性等特點,給系統之間的數據傳輸帶來了極大的便利,廣受開發者歡迎。

事實上,在 1996 年誕生之后,XML 逐漸成為了一種通用的數據交換格式。

不同的編程語言,解析 XML 的邏輯基本都是一樣的,只不過實現的語法稍有不同。

今天我們就一起來學習一下,采用 Java 編程語言來解析 XML,有哪些方法以及對應的優缺點。

經過整理,通過 Java 程序解析 XML 文件,目前比較主流的有以下四種方式:

  • DOM 解析
  • SAX 解析
  • JDOM 解析
  • DOM4J  解析

下面我們以如下的 XML 文件為例,分別介紹每種方式的解析實現。

<?xml version="1.0" encoding="utf-8" ?>
<class>
    <student id="1">
        <name>張三</name>
        <gender>男</gender>
        <age>26</age>
    </student>
    <student id="2">
        <name>里斯</name>
        <gender>男</gender>
        <age>36</age>
    </student>
 <student id="3">
        <name>王五</name>
        <gender>女</gender>
        <age>24</age>
    </student>
</class>

02、、DOM 解析

DOM 的全稱是:Document Object Model,是 Java 中最早支持的一種 XML 解析方式,可以不用依賴任何第三方包,通過 JDK 提供的 w3c 包里面的 api,即可實現快速解析,代碼編程簡單。

DOM 解析 XML 文檔的時候,會在內存中加載整個文檔來構造層次結構,因此優勢比較突出:

  • 1.能快速遍歷 XML 中任意節點數據,同時允許應用程序對數據和結構做出更改
  • 2.可以在任何時候在樹中上下導航,獲取和操作任意部分的數據

當然也有缺點:

  • 加載小的 XML 文檔問題不大,加載大的 XML 文檔,內存消耗會很大,有內存溢出的風險

總的來說,DOM 解析方式,對于數據量比較小的 XML 文檔,基本夠用。

實現過程如下:

import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.InputStream;

public class DomDemo {
    
    public static void main(String[] args) {
        // 1.獲取xml文件流
        InputStream inputStream = DomDemo.class.getClassLoader().getResourceAsStream("demo.xml");
        // 2.創建DocumentBuilderFactory對象
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 3.創建DocumentBuilder對象
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document d = builder.parse(inputStream);
            NodeList stdList = d.getElementsByTagName("student");
            for (int i = 0; i <stdList.getLength() ; i++) {
                Node std = stdList.item(i);
                // 遍歷標簽屬性
                NamedNodeMap attrs = std.getAttributes();
                for(int j=0; j< attrs.getLength(); j++){
                    Node attr = attrs.item(j);
                    System.out.println(attr.getNodeName()+":"+attr.getNodeValue());
                }
                // 遍歷標簽子節點
                NodeList childNodes = std.getChildNodes();
                for (int k = 0; k <childNodes.getLength() ; k++) {
                    if (childNodes.item(k).getNodeType()== Node.ELEMENT_NODE) {
                        System.out.println(childNodes.item(k).getNodeName() + ":" + childNodes.item(k).getTextContent());
                    }
                }
                System.out.println("==============");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

運行結果如下:

id:1
name:張三
gender:男
age:26
==============
id:2
name:里斯
gender:男
age:36
==============
id:3
name:王五
gender:女
age:24
==============

03、SAX 解析

SAX 的全稱是:Simple API for XML,也是 JDK 提供的另一種 XML 解析方式。

相比于 DOM,SAX 每次解析只在內存中加載 XML 文件的一小部分,即使針對較大的 XML 文件,它也不需要占用太多的內存,也不會存在內存溢出的問題。

優點如下:

  • 采用事件驅動模式一段一段的來解析數據,占用內存小
  • 只在讀取數據時檢查數據,不需要保存在內存中
  • 效率和性能較高,能解析大于系統內存的文檔

當然也有缺點:

  • 與 DOM 解析器相比,使用 SAX 解析器讀取 XML 文件時,解析邏輯比較復雜
  • 同時無法定位文檔層次,很難同時訪問同一文檔的不同部分數據,不支持 XPath

實現過程如下:

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

public class SAXDemo {

    public static void main(String[] args) throws Exception {
        // 1.獲取xml文件流
        InputStream inputStream = SAXDemo.class.getClassLoader().getResourceAsStream("demo.xml");
        // 2.獲取SAXParserFactory實例
        SAXParserFactory factory = SAXParserFactory.newInstance();
        // 3.獲取SAXparser實例
        SAXParser saxParser = factory.newSAXParser();
        // 4.創建Handel對象
        SAXDemoHandel handel = new SAXDemoHandel();
        // 5.解析XML文件
        saxParser.parse(inputStream, handel);
        // 6.獲取讀取結果
        List<Map<String, String>> students = handel.getStudents();
        for (Map<String, String> student : students) {
            System.out.println(student.toString());
        }
    }
}
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SAXDemoHandel extends DefaultHandler {

    private String value;

    private Map<String, String> student;

    private List<Map<String, String>> students = new ArrayList<>();

    public List<Map<String, String>> getStudents() {
        return students;
    }

    /**
     * xml 解析開始
     * @throws SAXException
     */
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        System.out.println("xml 解析開始");
    }

    /**
     * xml 解析結束
     * @throws SAXException
     */
    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
        System.out.println("xml 解析結束");
    }

    /**
     * 解析 XML 元素開始
     * @param uri
     * @param localName
     * @param qName
     * @param attributes
     * @throws SAXException
     */
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        System.out.println("開始遍歷節點:" +  qName);

        if (qName.equals("student")){
            student = new HashMap<>();
            for(int i=0; i<attributes.getLength();i++){
                student.put(attributes.getQName(i), attributes.getValue(i));
            }
        }
    }

    /**
     * 解析 XML 元素結束
     * @param uri
     * @param localName
     * @param qName
     * @throws SAXException
     */
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        System.out.println("節點遍歷結束:" +  qName);

        if(qName.equals("student")){
            students.add(student);
            student = null;
        } else if(qName.equals("name") || qName.equals("gender") || qName.equals("age")){
            student.put(qName, value);
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);

        // 獲取節點值數組
        value = new String(ch,start,length).trim();
        if (!value.equals("")) {
            System.out.println(value);
        }
    }
}

運行結果如下:

{gender=男, name=張三, id=1}
{gender=男, name=里斯, id=2}
{gender=女, name=王五, id=3}

04、JDOM 解析

JDOM 是 Java 生態中一個非常優秀的 XML 開源文檔解析庫,你可以把它看成是 DOM 及 SAX 的結合版,同時在設計上彌補了 DOM 及 SAX 在實際應用當中的不足之處。

優點如下:

  • 基于樹的模型處理 XML 文件,數據會加載在內存中
  • 沒有向下兼容的限制,因此比 DOM 簡單
  • 速度快,缺陷少
  • 具有 SAX 的解析特征
  • API 比 DOM 更容易理解

當然也有缺點:

  • 能處理大于內存的 XML 文檔
  • 不支持與 DOM 中相應遍歷包

總體來講,JDOM 對于大多數需要使用 XML 應用程序來說還是非常實用的。

實現過程如下:

<!--jdom -->
<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom</artifactId>
    <version>1.1.3</version>
</dependency>
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import java.io.InputStream;
import java.util.List;


public class JdomDemo {

    public static void main(String[] args) throws Exception {
        // 1.獲取xml文件流
        InputStream inputStream = JdomDemo.class.getClassLoader().getResourceAsStream("demo.xml");
        // 2.創建SAXBuilder對象
        SAXBuilder saxBuilder = new SAXBuilder();
        // 3.將輸入流加載到build中
        Document document = saxBuilder.build(inputStream);
        // 4.獲取根節點
        Element rootElement = document.getRootElement();
        // 5.獲取子節點
        List<Element> children = rootElement.getChildren();
        for (Element child : children) {
            List<Attribute> attributes = child.getAttributes();
            // 遍歷標簽屬性
            for (Attribute attr : attributes) {
                System.out.println(attr.getName()+":"+attr.getValue());
            }
            // 遍歷標簽子節點
            List<Element> childrenList = child.getChildren();
            for (Element  o: childrenList) {
                System.out.println(o.getName() + ":" + o.getValue());
            }
            System.out.println("==============");
        }
    }
}

運行結果如下:

id:1
name:張三
gender:男
age:26
==============
id:2
name:里斯
gender:男
age:36
==============
id:3
name:王五
gender:女
age:24
==============

05、DOM4J 解析

DOM4J 也是 Java 生態中一款非常非常優秀的 XML 開源文檔解析庫,是 JDOM 的升級品。

最初,它是 JDOM 的一種分支,后來合并了許多超出基本 XML 文檔表示的功能,最后單獨作為一工具對外發布。

優點如下:

  • 性能優異,功能強大,極端易使用
  • 開發簡便,同時也提供了一些提高性能的代替方法
  • 支持 XPath

唯一的缺點:

  • API 過于復雜

實現過程如下:

<!-- dom4j -->
 <dependency>
     <groupId>dom4j</groupId>
     <artifactId>dom4j</artifactId>
     <version>1.6.1</version>
</dependency>
public class Dom4jDemo {

    public static void main(String[] args) throws Exception {
        // 1.獲取xml文件流
        InputStream inputStream = Dom4jDemo.class.getClassLoader().getResourceAsStream("demo.xml");
        // 2.創建Reader對象
        SAXReader reader = new SAXReader();
        // 3.加載xml
        Document document = reader.read(inputStream);
        // 4.獲取根節點
        Element rootElement = document.getRootElement();
        // 5.遍歷元素
        Iterator iterator = rootElement.elementIterator();
        while (iterator.hasNext()){
            Element stu = (Element) iterator.next();
            // 遍歷標簽屬性
            List<Attribute> attributes = stu.attributes();
            for (Attribute attribute : attributes) {
                System.out.println(attribute.getName() + ":" + attribute.getValue());
            }

            // 遍歷標簽子節點
            Iterator iterator1 = stu.elementIterator();
            while (iterator1.hasNext()){
                Element stuChild = (Element) iterator1.next();
                System.out.println(stuChild.getName()+":"+stuChild.getStringValue());
            }
            System.out.println("==============");
        }
    }
}

運行結果如下:

id:1
name:張三
gender:男
age:26
==============
id:2
name:里斯
gender:男
age:36
==============
id:3
name:王五
gender:女
age:24
==============

06、小結

最后總結一下,目前許多開源項目中大量采用 DOM4J,例如 Hibernate 框架中就用到 DOM4J 來讀取 XML 配置文件,連 Sun 的 JAXM 也在用 DOM4J。

因此對于需要使用 XML 解析工具,如果項目中沒有什么包袱,首選 DOM4J。

對于一些已經在項目中用到的 XML 解析工具,如果不考慮移植性問題,也可以改成 DOM4J 來實現,當然具體問題具體分析,如果遷移成本很高,以前的工具依然能正常運行,也沒必要進行遷移。總之就是,適合的才是最好的,是否值得遷移,需要評估資源成本和時間以及必要性。

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2020-08-12 09:35:23

Docker工具開源

2020-11-12 10:00:56

Kubernetes工具Linux

2015-07-30 11:29:07

Web程序員CSS工具

2020-11-26 15:17:24

SQL數據庫工具

2021-07-16 16:47:40

命令行工具開源

2021-03-12 14:52:18

插件VS Code工具

2021-04-01 10:22:42

工具Linux文件

2021-04-11 09:51:25

Redis可視化工具

2021-03-15 14:09:49

電腦軟件安全

2010-06-28 13:27:51

常用UML建模工具

2021-11-26 10:36:36

瀏覽器插件谷歌

2014-04-09 10:51:56

iOS開發常用工具

2010-07-14 13:57:30

Perl開發工具

2019-12-16 15:16:29

工具代碼開發

2020-07-16 14:20:12

Docker管理工具Linux

2022-08-09 07:32:03

MySQLWindowsLinux

2020-02-24 19:40:22

WindowsSSH客戶端

2017-10-16 15:49:31

Linux閱讀器電子書

2023-08-05 14:13:53

項目管理工具

2019-12-23 14:17:46

數據可視化工具
點贊
收藏

51CTO技術棧公眾號

性久久久久久久| 成人久久视频在线观看| 久久精品国产亚洲一区二区| 中文字幕avav| 黄色污网站在线观看| 久久精品亚洲精品国产欧美| 成人激情视频在线观看| 精品午夜福利在线观看| 狠狠做六月爱婷婷综合aⅴ| 欧美日韩国产成人在线91| 日本男女交配视频| 成人激情电影在线看| 国产不卡一区视频| 国产精品xxx视频| 免费在线观看黄色av| 免费av一区二区三区四区| 欧美精品第1页| 欧美精品一区免费| 最近中文字幕免费mv2018在线 | 日本最新高清不卡中文字幕| 三级黄色免费观看| 九色精品91| 日韩视频免费观看高清完整版| 欧美精品第三页| 精灵使的剑舞无删减版在线观看| 国产日韩欧美不卡在线| 高清不卡日本v二区在线| www.亚洲激情| 亚洲一区二区三区高清不卡| 久久亚洲国产成人| 少妇av片在线观看| 色婷婷av一区二区三区丝袜美腿| 欧美一区二区三区色| 日av中文字幕| 黄频免费在线观看| 亚洲高清免费在线| 五月天激情图片| a中文在线播放| 久久久蜜臀国产一区二区| 好吊色欧美一区二区三区| www.97av.com| 国产精品一区二区三区乱码| 国产精品一区久久| 久久久久精彩视频| 欧美中文日韩| 欧美一级淫片aaaaaaa视频| 九九视频免费观看| 在线观看免费一区二区| 久久精品2019中文字幕| 日韩av片在线免费观看| 欧美三级伦理在线| 亚洲香蕉成视频在线观看| 成人乱码一区二区三区av| 日韩大胆成人| 亚洲国产精品久久久久| 视频免费在线观看| 成人av综合网| 亚洲国产成人精品一区二区| 精品人妻一区二区免费| www.豆豆成人网.com| 欧美成人一区二区三区片免费| 亚洲一二区在线观看| 伊人久久大香| 欧美一区二区国产| 香蕉久久久久久av成人| 久久男人av| 精品一区二区三区四区| 最近中文字幕在线mv视频在线| 免费看成人吃奶视频在线| 亚洲三级黄色在线观看| 三区四区在线观看| 国产精品久久观看| 欧美理论电影在线播放| 久久精品国产亚洲AV无码男同 | 不卡av日日日| 久久久久久久久久一区二区三区| 在线播放亚洲| 日本道色综合久久影院| 中文字幕观看在线| 国产精品亚洲午夜一区二区三区 | 在线观看日批视频| 激情亚洲综合在线| 高清国产一区| 国产高清一区在线观看| 亚洲欧洲综合另类| 97超碰在线人人| 成人动漫一区| 9191久久久久久久久久久| 日本久久久久久久久久| 欧美日韩爱爱| 久久高清视频免费| 中文字幕精品三级久久久| 日韩精品国产精品| 3d精品h动漫啪啪一区二区 | 亚洲综合久久网| 麻豆国产91在线播放| 91日韩久久| 国产在线日本| 亚洲黄色免费网站| 日韩一级免费在线观看| 粉嫩一区二区三区在线观看| 日韩h在线观看| 日本高清一二三区| 麻豆成人精品| 97免费高清电视剧观看| 国产综合在线观看| 亚洲一区二区三区自拍| 性欧美1819| 校园春色另类视频| 久久99视频精品| 国产日韩在线免费观看| a亚洲天堂av| www.-级毛片线天内射视视| 亚洲综合电影| 欧美一区二区视频在线观看2020| 一卡二卡三卡四卡| 国产一在线精品一区在线观看| 日本成熟性欧美| 日韩在线观看视频网站| 亚洲欧美日韩一区二区三区在线观看| 久草资源站在线观看| 亚洲一区二区三区在线免费| 亚洲丝袜一区在线| 你懂的国产视频| 91欧美精品| 亚洲一二三专区| 污视频网站观看| 真实原创一区二区影院| 欧美激情xxxx| 99视频在线观看免费| 中文字幕不卡的av| 成年人视频在线免费| 久久草在线视频| 欧美日韩国产91| 99国产精品99| 中文字幕视频一区二区三区久| 亚洲国产精品毛片av不卡在线| 凹凸成人在线| 久久久久久伊人| 日本三日本三级少妇三级66| a级影片在线| 欧美日韩国产小视频在线观看| 男女黄床上色视频| 成人网视频在线观看| 亚洲综合成人在线| 久久精品国产99久久99久久久| 久久亚洲成人| 欧美一级电影免费在线观看| 性欧美18一19性猛交| 亚洲视频一区二区免费在线观看| 欧美成年人视频在线观看| 亚洲国产网址| 日韩**中文字幕毛片| 五月婷婷久久久| 无码av免费一区二区三区试看| 久久黄色一级视频| 中文无码久久精品| 国产精品免费一区二区三区在线观看 | 最新97超碰在线| 欧美亚州韩日在线看免费版国语版 | 在线播放成人| 久久久97精品| 国产精品一区二区免费视频| 亚洲色图第一区| 免费观看黄网站| 欧美日韩一区二区高清| 国产精品污www一区二区三区| 91福利在线免费| 亚洲福利视频免费观看| 亚洲天堂日韩av| 国产亚洲精品aa午夜观看| 超碰在线人人爱| 天天色天天射综合网| 91精品视频在线看| av在线最新| 亚洲欧美日韩中文在线| 在线观看中文字幕码| 一区二区三区日韩精品视频| 久久久午夜精品福利内容| 性欧美精品高清| 特级西西444www大精品视频| 精品国产三区在线| 992tv成人免费影院| yw视频在线观看| 欧美一级二级三级蜜桃| 日本三级一区二区| 国产精品久久久久一区二区三区| 国内av一区二区| 亚洲久色影视| 午夜精品一区二区在线观看| 麻豆一区在线| 青青青国产精品一区二区| 香蕉视频国产在线观看| 亚洲第一精品福利| 中文在线资源天堂| 亚洲成人资源在线| 黄色片在线观看免费| 国产一区二区三区精品视频| 国产女主播自拍| 国产99久久| 91亚洲精品在线| 午夜伦理福利在线| 久久视频国产精品免费视频在线| 刘亦菲久久免费一区二区| 色噜噜狠狠成人网p站| 国产天堂av在线| 国产亚洲人成网站| 国产人妻黑人一区二区三区| 蜜桃精品在线观看| 国产精品宾馆在线精品酒店| 亚洲精品中文字幕乱码| 伊人亚洲福利一区二区三区| 国产视频在线观看视频| 91搞黄在线观看| 国产成人啪精品午夜在线观看| 国产欧美日韩精品在线| 人妻av一区二区| 国产一区二区中文字幕| 能看的毛片网站| 日韩一级欧洲| 国产女教师bbwbbwbbw| sdde在线播放一区二区| 久久福利电影| 超碰精品在线| 91嫩草视频在线观看| 成人日韩视频| 国产精品老女人精品视频 | 国产精品老女人视频| 中文字幕色婷婷在线视频| 欧美激情三级免费| gogo在线高清视频| 日韩视频永久免费观看| 国产午夜视频在线观看| 日韩精品黄色网| 午夜成人鲁丝片午夜精品| 欧美成人三级电影在线| 国产女人高潮时对白| 欧美日韩另类国产亚洲欧美一级| 欧产日产国产69| 日韩欧美在线网址| 国产精品久免费的黄网站| 欧美日韩亚洲系列| 九九热精品视频在线| 日韩欧美在线视频日韩欧美在线视频 | 天天爽人人爽夜夜爽| 男人操女人的视频在线观看欧美| 成人在线观看黄| 亚洲免费网址| 欧美成人免费高清视频| 久久一区中文字幕| 国产亚洲天堂网| 母乳一区在线观看| 国产视频一区二区三区在线播放| 久久久夜精品| 黄色片在线免费| 麻豆免费精品视频| www.久久91| 国产精品一区久久久久| 韩国av中国字幕| 99久久精品费精品国产一区二区| av鲁丝一区鲁丝二区鲁丝三区| 91丝袜高跟美女视频| 久久久精品人妻无码专区| 国产色一区二区| 网站永久看片免费| 亚洲欧美日韩国产成人精品影院| 青草草在线视频| 亚洲成年人影院| 永久免费无码av网站在线观看| 在线精品国精品国产尤物884a| 中国老头性行为xxxx| 4hu四虎永久在线影院成人| 亚洲高清视频网站| 日韩精品中文字幕有码专区| 春暖花开成人亚洲区| 久久久精品国产| 国产高清自产拍av在线| 国产精品免费视频xxxx| 亚洲高清999| 久久亚洲免费| 99精品综合| 欧美图片激情小说| 石原莉奈在线亚洲三区| 亚洲黄色av片| 99re热这里只有精品免费视频| 欧美另类z0zx974| 亚洲人成小说网站色在线 | 精品视频1区2区3区| 性生交大片免费看女人按摩| 亚洲欧美国产精品| caoporn97在线视频| 欧美综合在线第二页| 国产高清日韩| 欧美性bbwbbwbbwhd| 欧美aⅴ99久久黑人专区| 爱福利视频一区二区| 精品一区二区国语对白| www.日本高清| 综合av第一页| 成人公开免费视频| 日韩精品一区二区三区三区免费 | 欧美精品卡一卡二| 奇米精品一区二区三区四区| 丰满岳乱妇一区二区| 欧美韩国一区二区| 91浏览器在线观看| 91精品国产高清一区二区三区蜜臀| 香蕉久久国产av一区二区| 久久久国产成人精品| 日韩高清中文字幕一区二区| 97人人香蕉| 日韩欧美精品| 成人观看免费完整观看| 国产精品一区二区三区99| 黑人と日本人の交わりビデオ| 五月天视频一区| jlzzjlzz亚洲女人18| 在线观看欧美成人| 中国字幕a在线看韩国电影| www.久久爱.cn| 四虎成人av| 亚洲色精品三区二区一区| 成人av在线看| 久久久久久久久99| 777久久久精品| 欧美精品videos另类| 国产精品福利网站| 伊人春色精品| 成年人视频观看| 成人免费毛片高清视频| 九九热只有精品| 日韩一区二区三区视频在线观看| 欧美jizz18性欧美| 国产精品久久久久久久久久尿 | 国产精品7777| 91精品国产色综合久久ai换脸| 午夜激情视频在线| 国产精品天天狠天天看| 欧美三级三级| 九一精品在线观看| 欧美国产激情一区二区三区蜜月| 国产精品第5页| 亚洲精品一区在线观看香蕉| 中文字幕影音在线| 欧美日韩在线精品一区二区三区| 亚洲综合精品四区| 舐め犯し波多野结衣在线观看| 日韩欧美在线观看| 免费在线看v| 国产成人精品免高潮在线观看| 国产欧美高清视频在线| 国产v亚洲v天堂无码久久久| 久久久国产一区二区三区四区小说 | 国产精品无码网站| 欧美天堂在线观看| 国产小视频在线| 国产区精品在线观看| 天天射综合网视频| 成人在线短视频| 亚洲一区二区三区四区在线| 视频污在线观看| 欧美在线免费看| 日韩大片在线观看| 午夜激情视频网| 亚洲一区二区三区视频在线播放 | 中文字幕日韩高清| 天堂综合在线播放| 福利视频免费在线观看| 91麻豆.com| 久草视频在线免费| 麻豆国产精品va在线观看不卡 | 日韩av首页| 中文字幕一区二区三区四区五区六区| 国产麻豆精品久久一二三| 久久综合亚洲色hezyo国产| 日韩精品有码在线观看| 日本精品裸体写真集在线观看| 日本特级黄色大片| 高清不卡在线观看| 无码人妻丰满熟妇精品| 久久精品色欧美aⅴ一区二区| 9999久久久久| 日韩视频免费在线播放| 亚洲激情在线播放| 日韩精品视频无播放器在线看| 国产精品偷伦一区二区| 欧美国产高潮xxxx1819| 国产国语性生话播放| 欧美日韩国产免费一区二区| 男女在线视频| 五月天国产一区| 成人污视频在线观看| 中文字幕免费视频观看| 欧美国产日产韩国视频| 国内亚洲精品| 日本一区二区在线观看视频| 欧美性淫爽ww久久久久无| 久草在线新免费首页资源站| 日韩性感在线| 99热在这里有精品免费|