亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現的xml操作類完整實例

2020-01-24 01:05:21
字體:
來源:轉載
供稿:網友

本文實例講述了C#實現的xml操作類,分享給大家供大家參考,具體如下:

using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO;using System.Xml;using System.Text;namespace MSCL{  /// <summary>  /// XML 操作基類  /// </summary>  public class XmlHelper : IDisposable  {    //以下為單一功能的靜態類    #region 讀取XML到DataSet    /**//**************************************************     * 函數名稱:GetXml(string XmlPath)     * 功能說明:讀取XML到DataSet     * 參  數:XmlPath:xml文檔路徑     * 使用示列:     *     using EC; //引用命名空間     *     string xmlPath = Server.MapPath("/EBDnsConfig/DnsConfig.xml"); //獲取xml路徑     *     DataSet ds = EC.XmlObject.GetXml(xmlPath); //讀取xml到DataSet中     ************************************************/    /**//// <summary>    /// 功能:讀取XML到DataSet中    /// </summary>    /// <param name="XmlPath">xml路徑</param>    /// <returns>DataSet</returns>    public static DataSet GetXml(string XmlPath)    {      DataSet ds = new DataSet();      ds.ReadXml(@XmlPath);      return ds;    }    #endregion    #region 讀取xml文檔并返回一個節點    /**//**************************************************     * 函數名稱:ReadXmlReturnNode(string XmlPath,string Node)     * 功能說明:讀取xml文檔并返回一個節點:適用于一級節點     * 參  數: XmlPath:xml文檔路徑;Node 返回的節點名稱     * 適應用Xml:<?xml version="1.0" encoding="utf-8" ?>     *      <root>     *        <dns1>ns1.everdns.com</dns1>     *     </root>     * 使用示列:     *     using EC; //引用命名空間     *     string xmlPath = Server.MapPath("/EBDnsConfig/DnsConfig.xml"); //獲取xml路徑     *     Response.Write(XmlObject.ReadXmlReturnNode(xmlPath, "mailmanager"));     ************************************************/    /**//// <summary>    /// 讀取xml文檔并返回一個節點:適用于一級節點    /// </summary>    /// <param name="XmlPath">xml路徑</param>    /// <param name="NodeName">節點</param>    /// <returns></returns>    public static string ReadXmlReturnNode(string XmlPath, string Node)    {      XmlDocument docXml = new XmlDocument();      docXml.Load(@XmlPath);      XmlNodeList xn = docXml.GetElementsByTagName(Node);      return xn.Item(0).InnerText.ToString();    }    #endregion    #region 查找數據,返回一個DataSet    /**//**************************************************     * 函數名稱:GetXmlData(string xmlPath, string XmlPathNode)     * 功能說明:查找數據,返回當前節點的所有下級節點,填充到一個DataSet中     * 參  數:xmlPath:xml文檔路徑;XmlPathNode:當前節點的路徑     * 使用示列:     *     using EC; //引用命名空間     *     string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //獲取xml路徑     *     DataSet ds = new DataSet();     *     ds = XmlObject.GetXmlData(xmlPath, "root/items");//讀取當前路徑     *     this.GridView1.DataSource = ds;     *     this.GridView1.DataBind();     *     ds.Clear();     *     ds.Dispose();     * Xml示例:     *     <?xml version="1.0" encoding="utf-8" ?>     *      <root>     *       <items name="xinnet">     *        <url>http://www.paycenter.com.cn/cgi-bin/</url>     *        <port>80</port>     *       </items>     *      </root>     ************************************************/    /**//// <summary>    /// 查找數據,返回當前節點的所有下級節點,填充到一個DataSet中    /// </summary>    /// <param name="xmlPath">xml文檔路徑</param>    /// <param name="XmlPathNode">節點的路徑:根節點/父節點/當前節點</param>    /// <returns></returns>    public static DataSet GetXmlData(string xmlPath, string XmlPathNode)    {      XmlDocument objXmlDoc = new XmlDocument();      objXmlDoc.Load(xmlPath);      DataSet ds = new DataSet();      StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);      ds.ReadXml(read);      return ds;    }    #endregion    #region 更新Xml節點內容    /**//**************************************************     * 函數名稱:XmlNodeReplace(string xmlPath,string Node,string Content)     * 功能說明:更新Xml節點內容     * 參  數:xmlPath:xml文檔路徑;Node:當前節點的路徑;Content:內容     * 使用示列:     *     using EC; //引用命名空間     *     string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //獲取xml路徑     *     XmlObject.XmlNodeReplace(xmlPath, "root/test", "56789"); //更新節點內容     ************************************************/    /**//// <summary>    /// 更新Xml節點內容    /// </summary>    /// <param name="xmlPath">xml路徑</param>    /// <param name="Node">要更換內容的節點:節點路徑 根節點/父節點/當前節點</param>    /// <param name="Content">新的內容</param>    public static void XmlNodeReplace(string xmlPath, string Node, string Content)    {      XmlDocument objXmlDoc = new XmlDocument();      objXmlDoc.Load(xmlPath);      objXmlDoc.SelectSingleNode(Node).InnerText = Content;      objXmlDoc.Save(xmlPath);    }    #endregion    #region 刪除XML節點和此節點下的子節點    /**//**************************************************     * 函數名稱:XmlNodeDelete(string xmlPath,string Node)     * 功能說明:刪除XML節點和此節點下的子節點     * 參  數:xmlPath:xml文檔路徑;Node:當前節點的路徑;     * 使用示列:     *     using EC; //引用命名空間     *     string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //獲取xml路徑     *     XmlObject.XmlNodeDelete(xmlPath, "root/test"); //刪除當前節點     ************************************************/    /**//// <summary>    /// 刪除XML節點和此節點下的子節點    /// </summary>    /// <param name="xmlPath">xml文檔路徑</param>    /// <param name="Node">節點路徑</param>    public static void XmlNodeDelete(string xmlPath, string Node)    {      XmlDocument objXmlDoc = new XmlDocument();      objXmlDoc.Load(xmlPath);      string mainNode = Node.Substring(0, Node.LastIndexOf("/"));      objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));      objXmlDoc.Save(xmlPath);    }    #endregion    #region 插入一個節點和此節點的子節點    /**//**************************************************     * 函數名稱:XmlInsertNode(string xmlPath, string MailNode, string ChildNode, string Element,string Content)     * 功能說明:插入一個節點和此節點的字節點     * 參  數:xmlPath:xml文檔路徑;MailNode:當前節點的路徑;ChildNode:新插入的節點;Element:插入節點的子節點;Content:子節點的內容     * 使用示列:     *     using EC; //引用命名空間     *     string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //獲取xml路徑     *     XmlObject.XmlInsertNode(xmlPath, "root/test","test1","test2","測試內容"); //插入一個節點和此節點的字節點     * 生成的XML格式為     *     <test>     *        <test1>     *          <test2>測試內容</test2>     *        </test1>     *      </test>     ************************************************/    /**//// <summary>    /// 插入一個節點和此節點的子節點    /// </summary>    /// <param name="xmlPath">xml路徑</param>    /// <param name="MailNode">當前節點路徑</param>    /// <param name="ChildNode">新插入節點</param>    /// <param name="Element">插入節點的子節點</param>    /// <param name="Content">子節點的內容,已經應用CDATA</param>    public static void XmlInsertNode(string xmlPath, string MailNode, string ChildNode, string Element, string Content)    {      XmlDocument objXmlDoc = new XmlDocument();      objXmlDoc.Load(xmlPath);      XmlNode objRootNode = objXmlDoc.SelectSingleNode(MailNode);      XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode);      objRootNode.AppendChild(objChildNode);      XmlElement objElement = objXmlDoc.CreateElement(Element);      XmlCDataSection xcds = objXmlDoc.CreateCDataSection(Content);      objElement.AppendChild(xcds);      objChildNode.AppendChild(objElement);      objXmlDoc.Save(xmlPath);    }    #endregion    #region 插入一節點,帶一屬性    /**//**************************************************     * 函數名稱:XmlInsertElement(string xmlPath, string MainNode, string Element, string Attrib, string AttribContent, string Content)     * 功能說明:插入一節點,帶一屬性     * 參  數:xmlPath:xml文檔路徑;MailNode:當前節點的路徑;Element:新插入的節點;Attrib:屬性名稱;AttribContent:屬性值;Content:節點的內容     * 使用示列:     *     using EC; //引用命名空間     *     string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //獲取xml路徑     *     XmlObject.XmlInsertElement(xmlPath, "root/test", "test1", "Attrib", "屬性值", "節點內容"); //插入一節點,帶一屬性     * 生成的XML格式為     *     <test>     *       <test1 Attrib="屬性值">節點內容</test1>     *     </test>     ************************************************/    /**//// <summary>    /// 插入一節點,帶一屬性    /// </summary>    /// <param name="xmlPath">Xml文檔路徑</param>    /// <param name="MainNode">當前節點路徑</param>    /// <param name="Element">新節點</param>    /// <param name="Attrib">屬性名稱</param>    /// <param name="AttribContent">屬性值</param>    /// <param name="Content">新節點值</param>    public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Attrib, string AttribContent, string Content)    {      XmlDocument objXmlDoc = new XmlDocument();      objXmlDoc.Load(xmlPath);      XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);      XmlElement objElement = objXmlDoc.CreateElement(Element);      objElement.SetAttribute(Attrib, AttribContent);      objElement.InnerText = Content;      objNode.AppendChild(objElement);      objXmlDoc.Save(xmlPath);    }    #endregion    #region 插入一節點不帶屬性    /**//**************************************************     * 函數名稱:XmlInsertElement(string xmlPath, string MainNode, string Element, string Content)     * 功能說明:插入一節點不帶屬性     * 參  數:xmlPath:xml文檔路徑;MailNode:當前節點的路徑;Element:新插入的節點;Content:節點的內容     * 使用示列:     *     using EC; //引用命名空間     *     string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //獲取xml路徑     *     XmlObject.XmlInsertElement(xmlPath, "root/test", "text1", "節點內容"); //插入一節點不帶屬性     * 生成的XML格式為     *     <test>     *         <text1>節點內容</text1>     *     </test>     ************************************************/    public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Content)    {      XmlDocument objXmlDoc = new XmlDocument();      objXmlDoc.Load(xmlPath);      XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);      XmlElement objElement = objXmlDoc.CreateElement(Element);      objElement.InnerText = Content;      objNode.AppendChild(objElement);      objXmlDoc.Save(xmlPath);    }    #endregion    //必須創建對象才能使用的類    private bool _alreadyDispose = false;    private XmlDocument xmlDoc = new XmlDocument();    private XmlNode xmlNode;    private XmlElement xmlElem;    #region 構造與釋構    public XmlHelper()    {    }    ~XmlHelper()    {      Dispose();    }    protected virtual void Dispose(bool isDisposing)    {      if (_alreadyDispose) return;      if (isDisposing)      {        //      }      _alreadyDispose = true;    }    #endregion    #region IDisposable 成員    public void Dispose()    {      Dispose(true);      GC.SuppressFinalize(this);    }    #endregion    #region 創建xml文檔    /**//**************************************************     * 對象名稱:XmlObject     * 功能說明:創建xml文檔     * 使用示列:     *     using EC; //引用命名空間     *     string xmlPath = Server.MapPath("test.xml");     *     XmlObject obj = new XmlObject();     *     創建根節點     *     obj.CreateXmlRoot("root");     *     // 創建空節點     *     //obj.CreatXmlNode("root", "Node");     *     //創建一個帶值的節點     *     //obj.CreatXmlNode("root", "Node", "帶值的節點");     *     //創建一個僅帶屬性的節點     *     //obj.CreatXmlNode("root", "Node", "Attribe", "屬性值");     *     //創建一個僅帶兩個屬性值的節點     *     //obj.CreatXmlNode("root", "Node", "Attribe", "屬性值", "Attribe2", "屬性值2");     *     //創建一個帶屬性值的節點值的節點     *     // obj.CreatXmlNode("root", "Node", "Attribe", "屬性值","節點值");     *     //在當前節點插入帶兩個屬性值的節點     *     obj.CreatXmlNode("root", "Node", "Attribe", "屬性值", "Attribe2", "屬性值2","節點值");     *     obj.XmlSave(xmlPath);     *     obj.Dispose();     ************************************************/    #region 創建一個只有聲明和根節點的XML文檔    /**//// <summary>    /// 創建一個只有聲明和根節點的XML文檔    /// </summary>    /// <param name="root"></param>    public void CreateXmlRoot(string root)    {      //加入XML的聲明段落      xmlNode = xmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");      xmlDoc.AppendChild(xmlNode);      //加入一個根元素      xmlElem = xmlDoc.CreateElement("", root, "");      xmlDoc.AppendChild(xmlElem);    }    #endregion    #region 在當前節點下插入一個空節點節點    /**//// <summary>    /// 在當前節點下插入一個空節點節點    /// </summary>    /// <param name="mainNode">當前節點路徑</param>    /// <param name="node">節點名稱</param>    public void CreatXmlNode(string mainNode, string node)    {      XmlNode MainNode = xmlDoc.SelectSingleNode(mainNode);      XmlElement objElem = xmlDoc.CreateElement(node);      MainNode.AppendChild(objElem);    }    #endregion    #region 在當前節點插入一個僅帶值的節點    /**//// <summary>    /// 在當前節點插入一個僅帶值的節點    /// </summary>    /// <param name="mainNode">當前節點</param>    /// <param name="node">新節點</param>    /// <param name="content">新節點值</param>    public void CreatXmlNode(string mainNode, string node, string content)    {      XmlNode MainNode = xmlDoc.SelectSingleNode(mainNode);      XmlElement objElem = xmlDoc.CreateElement(node);      objElem.InnerText = content;      MainNode.AppendChild(objElem);    }    #endregion    #region 在當前節點的插入一個僅帶屬性值的節點    /**//// <summary>    /// 在當前節點的插入一個僅帶屬性值的節點    /// </summary>    /// <param name="MainNode">當前節點或路徑</param>    /// <param name="Node">新節點</param>    /// <param name="Attrib">新節點屬性名稱</param>    /// <param name="AttribValue">新節點屬性值</param>    public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue)    {      XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode);      XmlElement objElem = xmlDoc.CreateElement(Node);      objElem.SetAttribute(Attrib, AttribValue);      mainNode.AppendChild(objElem);    }    #endregion    #region 創建一個帶屬性值的節點值的節點    /**//// <summary>    /// 創建一個帶屬性值的節點值的節點    /// </summary>    /// <param name="MainNode">當前節點或路徑</param>    /// <param name="Node">節點名稱</param>    /// <param name="Attrib">屬性名稱</param>    /// <param name="AttribValue">屬性值</param>    /// <param name="Content">節點傳情</param>    public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue, string Content)    {      XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode);      XmlElement objElem = xmlDoc.CreateElement(Node);      objElem.SetAttribute(Attrib, AttribValue);      objElem.InnerText = Content;      mainNode.AppendChild(objElem);    }    #endregion    #region 在當前節點的插入一個僅帶2個屬性值的節點    /**//// <summary>    /// 在當前節點的插入一個僅帶2個屬性值的節點    /// </summary>    /// <param name="MainNode">當前節點或路徑</param>    /// <param name="Node">節點名稱</param>    /// <param name="Attrib">屬性名稱一</param>    /// <param name="AttribValue">屬性值一</param>    /// <param name="Attrib2">屬性名稱二</param>    /// <param name="AttribValue2">屬性值二</param>    public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue, string Attrib2, string AttribValue2)    {      XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode);      XmlElement objElem = xmlDoc.CreateElement(Node);      objElem.SetAttribute(Attrib, AttribValue);      objElem.SetAttribute(Attrib2, AttribValue2);      mainNode.AppendChild(objElem);    }    #endregion    #region 在當前節點插入帶兩個屬性的節點    /**//// <summary>    /// 在當前節點插入帶兩個屬性的節點    /// </summary>    /// <param name="MainNode">當前節點或路徑</param>    /// <param name="Node">節點名稱</param>    /// <param name="Attrib">屬性名稱一</param>    /// <param name="AttribValue">屬性值一</param>    /// <param name="Attrib2">屬性名稱二</param>    /// <param name="AttribValue2">屬性值二</param>    /// <param name="Content">節點值</param>    public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue, string Attrib2, string AttribValue2, string Content)    {      XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode);      XmlElement objElem = xmlDoc.CreateElement(Node);      objElem.SetAttribute(Attrib, AttribValue);      objElem.SetAttribute(Attrib2, AttribValue2);      objElem.InnerText = Content;      mainNode.AppendChild(objElem);    }    #endregion    #region 保存Xml    /**//// <summary>    /// 保存Xml    /// </summary>    /// <param name="path">保存的當前路徑</param>    public void XmlSave(string path)    {      xmlDoc.Save(path);    }    #endregion    #endregion    #region 根據父節點屬性值讀取子節點值    /**//**************************************************     * 函數名稱:GetSubElementByAttribute(string XmlPath, string FatherElenetName, string AttributeName, int AttributeIndex, int ArrayLength)     * 功能說明:根據父節點屬性值讀取子節點值     * 參  數: XmlPath:xml路徑;FatherElenetName:父節點名;AttributeName:屬性值;AttributeIndex:屬性索引;ArrayLength:要返回的節點數組長度     * 適應用Xml:     *      ArrayList al = new ArrayList();     *      al = EC.XmlObject.GetSubElementByAttribute(XmlPath, "page", "/index.aspx", 0, 3);     *      for (int i = 0; i < al.Count; i++)     *      {     *        Response.Write(al[i].ToString());     *        Response.Write("<br>");     *      }     ************************************************/    /**//// <summary>    /// 根據父節點屬性讀取字節點值    /// </summary>    /// <param name="XmlPath">xml路徑</param>    /// <param name="FatherElenetName">父節點名</param>    /// <param name="AttributeName">屬性值</param>    /// <param name="AttributeIndex">屬性索引</param>    /// <param name="ArrayLength">要返回的節點數組長度</param>    /// <returns></returns>    public static System.Collections.ArrayList GetSubElementByAttribute(string XmlPath, string FatherElenetName, string AttributeName, int AttributeIndex, int ArrayLength)    {      System.Collections.ArrayList al = new System.Collections.ArrayList();      XmlDocument docXml = new XmlDocument();      docXml.Load(@XmlPath);      XmlNodeList xn = docXml.DocumentElement.ChildNodes;      //遍歷第一層節點      foreach (XmlElement element in xn)      {        //判斷父節點是否為指定節點        if (element.Name == FatherElenetName)        {          //判斷父節點屬性的索引是否大于指定索引          if (element.Attributes.Count < AttributeIndex)            return null;          //判斷父節點的屬性值是否等于指定屬性          if (element.Attributes[AttributeIndex].Value == AttributeName)          {            XmlNodeList xx = element.ChildNodes;            if (xx.Count > 0)            {              for (int i = 0; i < ArrayLength & i < xx.Count; i++)              {                al.Add(xx[i].InnerText);              }            }          }        }      }      return al;    }    #endregion    #region 根據節點屬性讀取子節點值(較省資源模式)    /**//**************************************************     * 函數名稱:GetSubElementByAttribute(string XmlPath, string FatherElement, string AttributeName, string AttributeValue, int ArrayLength)     * 功能說明:根據父節點屬性值讀取子節點值     * 參  數: XmlPath:xml路徑;FatherElenetName:父節點名;AttributeName:屬性名;AttributeValue:屬性值;ArrayLength:要返回的節點數組長度     * 適應用Xml:     *      ArrayList al = new ArrayList();     *      al = EC.XmlObject.GetSubElementByAttribute(XmlPath, "page", "@name", "/index.aspx", 3);     *      for (int i = 0; i < al.Count; i++)     *      {     *        Response.Write(al[i].ToString());     *        Response.Write("<br>");     *      }     ************************************************/    /**//// <summary>    /// 根據節點屬性讀取子節點值(較省資源模式)    /// </summary>    /// <param name="XmlPath">xml路徑</param>    /// <param name="FatherElement">父節點值</param>    /// <param name="AttributeName">屬性名稱</param>    /// <param name="AttributeValue">屬性值</param>    /// <param name="ArrayLength">返回的數組長度</param>    /// <returns></returns>    public static System.Collections.ArrayList GetSubElementByAttribute(string XmlPath, string FatherElement, string AttributeName, string AttributeValue, int ArrayLength)    {      System.Collections.ArrayList al = new System.Collections.ArrayList();      XmlDocument docXml = new XmlDocument();      docXml.Load(@XmlPath);      XmlNodeList xn;      xn = docXml.DocumentElement.SelectNodes("http://" + FatherElement + "[" + @AttributeName + "='" + AttributeValue + "']");      XmlNodeList xx = xn.Item(0).ChildNodes;      for (int i = 0; i < ArrayLength & i < xx.Count; i++)      {        al.Add(xx.Item(i).InnerText);      }      return al;    }    #endregion  }}

更多關于C#相關內容感興趣的讀者可查看本站專題:《C#程序設計之線程使用技巧總結》、《C#操作Excel技巧總結》、《C#中XML文件操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#數據結構與算法教程》、《C#數組操作技巧總結》及《C#面向對象程序設計入門教程

希望本文所述對大家C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九热这里只有精品6| 亚洲自拍偷拍福利| 日韩视频永久免费观看| 国产精品青青在线观看爽香蕉| 亚洲精品日韩丝袜精品| 日韩毛片在线观看| 久久久亚洲精品视频| 国产精品视频xxx| 欧美日韩在线视频观看| 疯狂做受xxxx高潮欧美日本| 57pao成人国产永久免费| 国产精品日韩在线播放| 久久久久久尹人网香蕉| 久久国产精品久久国产精品| 精品人伦一区二区三区蜜桃免费| 亚洲va男人天堂| 国产女精品视频网站免费| 国产精品96久久久久久又黄又硬| 国产一区二区精品丝袜| 亚洲xxxx做受欧美| 国产精品日韩电影| 国产精品免费福利| 欧美亚洲国产日韩2020| 欧美精品在线免费观看| 久久99国产精品自在自在app| 久久久久久久成人| 久久亚洲精品小早川怜子66| 日韩精品免费视频| 久久精品电影一区二区| 欧美日韩国产综合新一区| 欧美极品少妇xxxxⅹ裸体艺术| 欧美午夜片在线免费观看| 精品无人区太爽高潮在线播放| 欧美视频一区二区三区…| 精品五月天久久| 欧美日韩视频免费播放| 国产美女直播视频一区| 亚洲色图在线观看| 精品日本高清在线播放| 最近的2019中文字幕免费一页| 亚洲va码欧洲m码| 国产欧洲精品视频| 欧美性猛交99久久久久99按摩| 亚洲精品v欧美精品v日韩精品| 97视频在线看| 日韩欧美第一页| 久久成人人人人精品欧| 亚洲精品国产suv| 91中文精品字幕在线视频| 亚洲小视频在线| 久久精品在线视频| 国内成人精品视频| 亚洲天堂一区二区三区| 亚洲一区中文字幕在线观看| 亚洲热线99精品视频| 国产一区二中文字幕在线看| 日韩久久免费视频| 欧美性xxxxxx| 亚洲人成在线一二| 欧美日韩亚洲国产一区| 最近2019好看的中文字幕免费| 欧美精品电影免费在线观看| 高清欧美性猛交| 亚洲国产欧美一区二区三区久久| 国产欧美日韩高清| 国产成人在线精品| 91免费在线视频网站| 久久久精品视频在线观看| 久久亚洲精品中文字幕冲田杏梨| 亚洲欧美在线看| 久久99热这里只有精品国产| 中文字幕日韩欧美在线视频| 国产精品久久99久久| 亚洲成人性视频| 91精品国产免费久久久久久| 国产自摸综合网| 成人a在线观看| 国产精品爱啪在线线免费观看| 国产视频999| 久久综合网hezyo| 国产亚洲欧洲在线| 自拍偷拍亚洲在线| 孩xxxx性bbbb欧美| 日本精品视频在线观看| 久久精视频免费在线久久完整在线看| 亚洲免费视频观看| 亚洲最大的av网站| 国产精品一区电影| 色婷婷久久一区二区| 在线看片第一页欧美| 日韩在线免费视频| 欧美限制级电影在线观看| 少妇av一区二区三区| 夜色77av精品影院| 日本精品久久久久久久| 精品亚洲夜色av98在线观看| 亚洲国产精久久久久久久| 欧美大片在线看免费观看| 欧美日韩性视频| 亚洲国产成人久久| 国产有码在线一区二区视频| 国产精品成人av在线| 国产免费一区视频观看免费| 欧美极品美女视频网站在线观看免费| 亚洲精品国精品久久99热一| 亚洲精品第一国产综合精品| 欧美麻豆久久久久久中文| 日韩在线中文字| 久久亚洲精品国产亚洲老地址| 亚洲影院色无极综合| 92裸体在线视频网站| 国产视频久久久久| 国模叶桐国产精品一区| 久久久在线观看| 精品无人国产偷自产在线| 国产成人91久久精品| 国产精品视频网站| 国产有码在线一区二区视频| 亚洲va国产va天堂va久久| 日韩欧美国产一区二区| 欧美黄色成人网| 国产亚洲视频中文字幕视频| 亚洲欧美激情在线视频| 91中文在线观看| 亚洲综合成人婷婷小说| 日韩欧中文字幕| 亚洲成人精品久久久| 不卡av电影院| 久久久女女女女999久久| 欧美性视频在线| 狠狠做深爱婷婷久久综合一区| 亚洲男人天天操| 久久久久久久久久久免费精品| 国产丝袜高跟一区| 欧美大全免费观看电视剧大泉洋| 一区二区欧美日韩视频| 中文字幕欧美精品在线| 精品美女久久久久久免费| 伊人久久免费视频| 国产成人免费91av在线| 在线中文字幕日韩| 欧美午夜无遮挡| 午夜精品美女自拍福到在线| 97免费在线视频| 国产精品丝袜一区二区三区| 国产欧美一区二区| 国产精品久久久久久久久久久久久| 久久电影一区二区| 久久中国妇女中文字幕| 18性欧美xxxⅹ性满足| 91免费看片在线| 国产大片精品免费永久看nba| 成人信息集中地欧美| 成人免费视频在线观看超级碰| 97视频在线观看播放| 中文一区二区视频| www日韩欧美| 国产成人精品久久亚洲高清不卡| 欧美日在线观看| 成人观看高清在线观看免费| 欧美亚洲视频在线看网址| 91免费看片在线| 亚洲人精品午夜在线观看| 久久在线观看视频|