狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當(dāng)前位置:系統(tǒng)之家 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

運(yùn)用VB設(shè)置XML數(shù)據(jù)

運(yùn)用VB設(shè)置XML數(shù)據(jù)

更新時(shí)間:2019-10-06 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

  什么是XML

  擴(kuò)展標(biāo)記語言XML是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語言,使用一系列簡(jiǎn)單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立,雖然XML占用的空間比二進(jìn)制數(shù)據(jù)要占用更多的空間,但XML極其簡(jiǎn)單易于掌握和使用。

  XML與Access,Oracle和SQL Server等數(shù)據(jù)庫不同,數(shù)據(jù)庫提供了更強(qiáng)有力的數(shù)據(jù)存儲(chǔ)和分析能力,例如:數(shù)據(jù)索引、排序、查找、相關(guān)一致性等,XML僅僅是展示數(shù)據(jù)。事實(shí)上XML與其他數(shù)據(jù)表現(xiàn)形式最大的不同是:他極其簡(jiǎn)單。這是一個(gè)看上去有點(diǎn)瑣細(xì)的優(yōu)點(diǎn),但正是這點(diǎn)使XML與眾不同。

  XML的簡(jiǎn)單使其易于在任何應(yīng)用程序中讀寫數(shù)據(jù),這使XML很快成為數(shù)據(jù)交換的唯一公共語言,雖然不同的應(yīng)用軟件也支持其它的數(shù)據(jù)交換格式,但不久之后他們都將支持XML,那就意味著程序可以更容易的與Windows、Mac OS, Linux以及其他平臺(tái)下產(chǎn)生的信息結(jié)合,然后可以很容易加載XML數(shù)據(jù)到程序中并分析他,并以XML格式輸出結(jié)果。

  XML的優(yōu)點(diǎn)

  我們談到XML長(zhǎng)于在不同的應(yīng)用程序之間交換數(shù)據(jù),XML文件也便于構(gòu)建小的數(shù)據(jù)庫,不久以前,軟件都使用INI文件存儲(chǔ)配置信息、用戶參數(shù)以及其他信息,后來微軟引入了系統(tǒng)注冊(cè)表,接作微軟告訴我們不應(yīng)該再使用INI文件了,從那時(shí)起Visual Basic對(duì)INI文件的支持被削弱了。但不幸的是注冊(cè)表有幾個(gè)致命的缺點(diǎn):不是簡(jiǎn)單的文本文件,難于讀寫、可能會(huì)變得龐大和緩慢、如果注冊(cè)表不知何故出現(xiàn)問題,將有可能造成系統(tǒng)死機(jī)。

  將配置信息放在XML文件中可以避免這些問題,甚至可以將XML文件設(shè)置為一個(gè)共享文件,這樣在不同的計(jì)算機(jī)上的用戶就可以共享數(shù)據(jù),這是注冊(cè)表所不能比擬的。

  在被稱為下一代ASP的ASP.NET中可以在WEB頁中直接使用XML,你可以使用數(shù)據(jù)綁定控件直接綁定數(shù)據(jù)并自動(dòng)顯示。

  當(dāng)然也可以不選擇XML,使用文本文件、注冊(cè)表、數(shù)據(jù)庫都可以完成XML所能完成的任務(wù),XML只是你在數(shù)據(jù)存儲(chǔ)和恢復(fù)的另一種工具而已。

  XML語法簡(jiǎn)介

  XML的語法非常的簡(jiǎn)單,XML文檔由節(jié)點(diǎn)組成,使用打開和關(guān)閉節(jié)點(diǎn)描述標(biāo)記,在格式上與HTML標(biāo)記非常相似,它們之間最大的不同是:XML中可以自由定義標(biāo)記名。比如下面的標(biāo)記就描述了一個(gè)電話號(hào)碼:

<Phone>987-654-3210</Phone>

  而且不用聲明標(biāo)記名就可以使用。

  開始和結(jié)束標(biāo)記必須相同,XML是識(shí)別大小寫的,所以標(biāo)記的大小寫也必須相同。比如上面的例子中以<Phone>標(biāo)記開始就必須以</Phone>標(biāo)記結(jié)束,而不能是</phone>或</PHONE>

  節(jié)點(diǎn)標(biāo)記中可以包含屬性,比如下面的代碼中Phone節(jié)點(diǎn)包含屬性Type,其值為WorkFax:

<Phone Type="WorkFax">987-654-3210<Phone>

  如果不愿意在節(jié)點(diǎn)中包含一個(gè)值,那么可以不需要結(jié)束標(biāo)記,可以用在開始標(biāo)記的后面加一個(gè)斜線來結(jié)束節(jié)點(diǎn),在下面的例子中,Phone標(biāo)記的Number屬性就存儲(chǔ)了一個(gè)電話號(hào)碼,所以就不需要一個(gè)結(jié)束標(biāo)記:

<Phone Type="WorkFax" Number="987-654-3210" />

  XML文檔的結(jié)構(gòu)是一個(gè)樹形等級(jí)結(jié)構(gòu)。文檔必須有一個(gè)唯一的根結(jié)點(diǎn),根節(jié)點(diǎn)包含所有其它節(jié)點(diǎn)。下面我們舉一個(gè)較為完整的例子:

<Addresses>
 <Entry Type="Personal">
 。糉irstName>Andy</FirstName>
 。糒astName>Fickle</LastName>
 。糞treet>1234 Programmer Place</Street>
 。糃ity>Bugsville</City>
 。糞tate>CO</State>
 。糧ip>82379</Zip>
 。糚hone Type="Home">354-493-9489</Phone>
 </Entry>
。糆ntry Type="Work">
 。糉irstName>Betty</FirstName>
 。糒astName>Masterson</LastName>
  <Phone Type="Work">937-878-4958</Phone>
  <Phone Type="WorkFax">937-878-4900</Phone>
。/Entry>
 ...
</Addresses>


  注意相似的節(jié)點(diǎn)不需要包含相同的信息,例如第一個(gè)Entry節(jié)點(diǎn)包含了地址信息和家庭電話號(hào)碼,第二個(gè)Entry節(jié)點(diǎn)包含了Work和WorkFax電話號(hào)碼,而沒有包含第一個(gè)Entry節(jié)點(diǎn)包含的信息。

  XML工具

  如前面的例子顯示,XML語法是如此的簡(jiǎn)單以至于你可以在很短的時(shí)間作一個(gè)XML解析器,幸運(yùn)的是你不必這樣做,因?yàn)閄ML工具可以運(yùn)行在各種平臺(tái)上,包括可以安裝了Visual Basic的Windows。

  正是這些L工具而不是XML本身使XML變得更強(qiáng)大和復(fù)雜。不同的解析器使你可以某一時(shí)刻加載整個(gè)XML文檔或只加載某個(gè)節(jié)點(diǎn),與此相反,XML Writer 可以同時(shí)創(chuàng)建一個(gè)XML文檔和節(jié)點(diǎn)。

  DOM解析器使我們能夠很方便的加載、復(fù)制、排序、修改和存儲(chǔ)XML文件,遍歷節(jié)點(diǎn)獲得名稱或?qū)傩,并給結(jié)果排序。雖然他們的功能沒有真正的關(guān)系數(shù)據(jù)庫強(qiáng)大,但DOM的這些特點(diǎn)依然非常有用。

  XSD可以定義XML文檔的格式,XSL擴(kuò)展樣式單定義了怎樣將XML文檔轉(zhuǎn)換成其他可以在WEB瀏覽器中瀏覽的文件格式,比如HTML文件。

  這些工具實(shí)際上比XML本身更復(fù)雜,所以所有講解XML的書籍都花了很大的篇幅解釋這些XML工具。但這超出了本文的范圍,有興趣的讀者可以參考有關(guān)資料。

  Visual Basic.Net提供了使用XML、XSL以及其他XML工具的完整工具。但不用等待VB.NET,微軟XML核心服務(wù)(MSXML)版本4.0提供了從Visual Basic6.0加載和存儲(chǔ)XML文檔的工具。

  在msdn.microsoft.com/xml/default.asp中下載最新版本的MSXML,并安裝在計(jì)算機(jī)上。在Visual Basic 6.0中使用Microsoft XML V4.0象引用其他對(duì)象一樣,首先在工程菜單中選擇引用菜單項(xiàng),選擇Microsoft V4.0,單擊OK,一切完成后就現(xiàn)在就可以在VB應(yīng)用程序中添加XML對(duì)象了。

  DOMDocument 類

  文檔對(duì)象模型(DOM)使用了一系列相應(yīng)的對(duì)象描述了XML文檔的等級(jí)狀態(tài),DOMDocument類是一個(gè)描繪XML文檔的DOM結(jié)構(gòu)的MSXML類。

  DOMDocument類僅僅提供了很少的幾個(gè)有用的屬性和方法。Load方法載入一個(gè)xml文件,loadxml方法將字符串作為xml數(shù)據(jù)添加到對(duì)象中。例如,下面的代碼就將一個(gè)小的xml文件添加到名為xml_document的文檔中。

Dim xml_document As New DOMDocument

xml_document.loadXML _
"<Person>" & vbCrLf & _
" <FirstName>Rod</FirstName>" & vbCrLf & _
" <LastName>Stephens</LastName>" & vbCrLf & _
"</Person>"


  DOMDocument的xml屬性返回文檔的xml描述,可以顯示這些返回值看看這些文檔究竟是什么樣子,也可以將它存儲(chǔ)為一個(gè)文件,但這完全不必要,因?yàn)镈OMDocument對(duì)象的save方法已經(jīng)自動(dòng)將他們存儲(chǔ)了。

  DOMDocument對(duì)象的documentElement屬性表示文檔數(shù)據(jù)的根結(jié)點(diǎn),通常情況下操作XML文檔都從這里開始。

  DOMDocument提供了幾種創(chuàng)建新節(jié)點(diǎn)的方法。CreateElement方法為文檔創(chuàng)建一個(gè)新的元素節(jié)點(diǎn),其他創(chuàng)建節(jié)點(diǎn)的方法有createAttribute, createProcessingInstruction, 和 createTextNode,在這里就不一一介紹了。

  IXMLDOMNode類

  IXMLDOMNode類描述了一個(gè)節(jié)點(diǎn),該類提供了一系列用于搜索和操縱XML文檔的屬性和方法。
selectSingleNode 方法用于搜索指定節(jié)點(diǎn)的后代,用于搜索指定節(jié)點(diǎn)路徑的語言稱為XPATH,XPATH非常棘手,本文就不詳細(xì)說明其規(guī)范了。下面我們將介紹兩個(gè)對(duì)搜索子節(jié)點(diǎn)有特別有用并且簡(jiǎn)單的方法。

  在給selectsingleNode方法中輸入子節(jié)點(diǎn)的名字,該方法將在節(jié)點(diǎn)的子節(jié)點(diǎn)進(jìn)行精確匹配搜索。如果在輸入的字符串前面加上".//",那么將搜索節(jié)點(diǎn)的全部后代。

' Search for a child node named "LastName."
Set last_name_node = address_node.selectSingleNode("LastName")

' Search for any descendant named "LastName."
Set last_name_node = address_node.selectSingleNode(".//LastName")


  下面列出了IXMLDOMNode對(duì)象的部分非常有用的屬性:

   attributes.節(jié)點(diǎn)屬性集合

   nodeName.節(jié)點(diǎn)的標(biāo)記名

   nodeTypeString.節(jié)點(diǎn)的類型

   ownerDocument.返回DOMDocument對(duì)象包含的節(jié)點(diǎn)

   text.表示節(jié)點(diǎn)包含的文本內(nèi)容。如果該節(jié)點(diǎn)包含其他節(jié)點(diǎn),那么text代表了所有節(jié)點(diǎn)的文本內(nèi)容的組合。

   xml.給出了節(jié)點(diǎn)的xml內(nèi)容,例如:"<FirstName>Rod</FirstName>".

  ChildNodes集合包含了節(jié)點(diǎn)的子節(jié)點(diǎn)。要給節(jié)點(diǎn)增加一個(gè)子節(jié)點(diǎn),首先必須給使用DOMDocument對(duì)象的節(jié)點(diǎn)創(chuàng)建方法,然后將這個(gè)新建的節(jié)點(diǎn)加入到父節(jié)點(diǎn)的childNodes集合中。下面的代碼展示了創(chuàng)建一個(gè)新的子節(jié)點(diǎn)的子程序,并使用父節(jié)點(diǎn)的appendChild方法將其加入到父節(jié)點(diǎn)中:

' Add a new node to the indicated parent node.
Private Sub CreateNode(ByVal indent As Integer, _
ByVal parent As IXMLDOMNode, ByVal node_name As String, _
ByVal node_value As String)
Dim new_node As IXMLDOMNode

' Create the new node.
Set new_node = parent.ownerDocument.createElement(node_name)

' Set the node's text value.
new_node.Text = node_value

' Add the node to the parent.
parent.appendChild new_node
End Sub

  SaveValues 程序

  現(xiàn)在我們可以使用XML創(chuàng)建一個(gè)簡(jiǎn)單的程序(如圖1),其值存儲(chǔ)到XML文件中,在程序開始運(yùn)行時(shí),程序從VALUE.XML文件中加載數(shù)據(jù),在程序運(yùn)行結(jié)束時(shí),將程序中的現(xiàn)行值存入VALUE.XML文件中。
  下面的代碼是顯示了VALUE.XML文件的結(jié)構(gòu):

<Values>
 <FirstName>Rod</FirstName>
。糒astName>Stephens</LastName>
。糞treet>1234 Programmer Place</Street>
。糃ity>Bugsville</City>
 <State>CO</State>
 <Zip>80276</Zip>
</Values>


  List1顯示了怎樣編寫SaveValues,當(dāng)載入表單時(shí),form_load事件觸發(fā)LoadValues子程序。

  LoadValues創(chuàng)建了一個(gè)名為xml_document的DOMDocument對(duì)象,然后載入xml文件,使用selectSingleNode方法查找名為values的節(jié)點(diǎn),然后使用GetNodeValue方法獲得從value節(jié)點(diǎn)后代中得到的值。

  GetNodeValue使用value節(jié)點(diǎn)的selectSingleNode方法尋找目標(biāo)節(jié)點(diǎn),如果節(jié)點(diǎn)不存在函數(shù)將返回一個(gè)缺省值,如果找到這個(gè)節(jié)點(diǎn)GetNodeValue將返回該節(jié)點(diǎn)的text值。對(duì)于value.xml文件中的數(shù)據(jù)節(jié)點(diǎn),text僅僅是包含在節(jié)點(diǎn)中的文本內(nèi)容。

  當(dāng)窗體卸載時(shí)觸發(fā)form_unload事件,unload事件調(diào)用SaveValues子程序。程序創(chuàng)建一個(gè)新的DOMDocument對(duì)象,該對(duì)象創(chuàng)建一個(gè)新的名為value的節(jié)點(diǎn),然后用文檔的appendChild方法將節(jié)點(diǎn)添加到文檔中。

  在創(chuàng)建所有新的節(jié)點(diǎn)后,SaveValues調(diào)用DOMDocument's save方法存儲(chǔ)新的xml文件。

  注意這個(gè)新的文件已經(jīng)覆蓋了舊文件,使用DOMDocument對(duì)象無法部分改變XML文件,可以加載XML文件,然后修改其中一部分,然后保存文件,但原文件將被完全覆蓋。這是一個(gè)小的缺陷,但在這時(shí)可以使用其它程序進(jìn)行修改。

  List1的最后一部分是CreateNode子程序,CreateNode 為父節(jié)點(diǎn)創(chuàng)建一個(gè)新節(jié)點(diǎn)并同時(shí)給這個(gè)節(jié)點(diǎn)賦值。在這個(gè)子程序中首先引用一個(gè)DOMDocument對(duì)象,然后使用該對(duì)象的createElement方法創(chuàng)建一個(gè)新的節(jié)點(diǎn)。

  createNode方法設(shè)置節(jié)點(diǎn)的text屬性,然后將節(jié)點(diǎn)作為子節(jié)點(diǎn)添加到父節(jié)點(diǎn)中。

  List1:

Option Explicit

Private m_AppPath As String

Private Sub Form_Load()
' Get the application's startup path.
m_AppPath = App.Path
If Right$(m_AppPath, 1) <> "" Then m_AppPath = m_AppPath & ""

' Load the values.
LoadValues
End Sub

Private Sub Form_Unload(Cancel As Integer)
' Save the current values.
SaveValues
End Sub

' Load saved values from XML.
Private Sub LoadValues()
Dim xml_document As DOMDocument
Dim values_node As IXMLDOMNode

' Load the document.
Set xml_document = New DOMDocument
xml_document.Load m_AppPath & "Values.xml"

' If the file doesn't exist, then
' xml_document.documentElement is Nothing.
If xml_document.documentElement Is Nothing Then
' The file doesn't exist. Do nothing.
Exit Sub
End If

' Find the Values section.
Set values_node = xml_document.selectSingleNode("Values")

' Read the saved values.
txtFirstName.Text = GetNodeValue(values_node, "FirstName", "???")
txtLastName.Text = GetNodeValue(values_node, "LastName", "???")
txtStreet.Text = GetNodeValue(values_node, "Street", "???")
txtCity.Text = GetNodeValue(values_node, "City", "???")
txtState.Text = GetNodeValue(values_node, "State", "???")
txtZip.Text = GetNodeValue(values_node, "Zip", "???")
End Sub

' Return the node's value.
Private Function GetNodeValue(ByVal start_at_node As IXMLDOMNode, _
ByVal node_name As String, _
Optional ByVal default_value As String = "") As String
Dim value_node As IXMLDOMNode

Set value_node = start_at_node.selectSingleNode(".//" & node_name)
If value_node Is Nothing Then
GetNodeValue = default_value
Else
GetNodeValue = value_node.Text
End If
End Function

' Save the current values.
Private Sub SaveValues()
Dim xml_document As DOMDocument
Dim values_node As IXMLDOMNode

' Create the XML document.
Set xml_document = New DOMDocument

' Create the Values section node.
Set values_node = xml_document.createElement("Values")

' Add the Values section node to the document.
xml_document.appendChild values_node

' Create nodes for the values inside the
' Values section node.
CreateNode values_node, "FirstName", txtFirstName.Text
CreateNode values_node, "LastName", txtLastName.Text
CreateNode values_node, "Street", txtStreet.Text
CreateNode values_node, "City", txtCity.Text
CreateNode values_node, "State", txtState.Text
CreateNode values_node, "Zip", txtZip.Text

' Save the XML document.
xml_document.save m_AppPath & "Values.xml"
End Sub

' Add a new node to the indicated parent node.
Private Sub CreateNode(ByVal parent As IXMLDOMNode, _
ByVal node_name As String, ByVal node_value As String)
Dim new_node As IXMLDOMNode

' Create the new node.
Set new_node = parent.ownerDocument.createElement(node_name)

' Set the node's text value.
new_node.Text = node_value

' Add the node to the parent.
parent.appendChild new_node
End Sub

 SaveValuesIndented 程序

  雖然每個(gè)人都化了很大的精力去處理xml文檔,使他們看上更容易些,但xml工具一般都忽略了那些使xml文檔結(jié)構(gòu)明顯的空白和縮進(jìn),xml解析器也同樣忽略縮進(jìn)和空白。

  不幸的是我們例子也同樣忽略了這些縮進(jìn)和空白,SaveValues創(chuàng)建了一個(gè)象下面那樣的xml文件,所有的代碼都在同一行中。

<Values><FirstName>Rod</FirstName><LastName>Stephens</LastNa
me><Street>1234 Programmer Place</Street><City>Bugsville</Ci
ty><State>CO</State><Zip>80276</Zip></Values>

  VB.NET中包括了文本寫入類,可以XML文檔規(guī)定格式。但MSXML重沒有這種功能,所以如果需要以一種清晰的格式保存XML文件,只能另行添加它的格式。

  List2列出了程序SaveValuesIndented使用的代碼,SaveValues子程序與上面例子中講的幾乎完全相同,但他在創(chuàng)建value節(jié)點(diǎn)后同時(shí)給XML文檔創(chuàng)建了一個(gè)<value>標(biāo)記的新行。

  然后SaveValues 調(diào)用CreateNode創(chuàng)建一個(gè)新的數(shù)據(jù)節(jié)點(diǎn),但在這里它傳遞給CreateNode一個(gè)新的參數(shù),這個(gè)參數(shù)表示這個(gè)新節(jié)點(diǎn)的縮進(jìn)方式。

  CreateNode

' Save the current values.
Private Sub SaveValues()
Dim xml_document As DOMDocument
Dim values_node As IXMLDOMNode

' Create the XML document.
Set xml_document = New DOMDocument

' Create the Values section node.
Set values_node = xml_document.createElement("Values")

' Add a new line.
values_node.appendChild xml_document.createTextNode(vbCrLf)

' Add the Values section node to the document.
xml_document.appendChild values_node

' Create nodes for the values inside the
' Values section node.
CreateNode 4, values_node, "FirstName", txtFirstName.Text
CreateNode 4, values_node, "LastName", txtLastName.Text
CreateNode 4, values_node, "Street", txtStreet.Text
CreateNode 4, values_node, "City", txtCity.Text
CreateNode 4, values_node, "State", txtState.Text
CreateNode 4, values_node, "Zip", txtZip.Text

' Save the XML document.
xml_document.save m_AppPath & "Values.xml"
End Sub

' Add a new node to the indicated parent node.
Private Sub CreateNode(ByVal indent As Integer, _
 ByVal parent As IXMLDOMNode, ByVal node_name As String, _
 ByVal node_value As String)
Dim new_node As IXMLDOMNode

' Indent.
parent.appendChild parent.ownerDocument.createTextNode(Space$(indent))

' Create the new node.
Set new_node = parent.ownerDocument.createElement(node_name)

' Set the node's text value.
new_node.Text = node_value

' Add the node to the parent.
parent.appendChild new_node

' Add a new line.
parent.appendChild parent.ownerDocument.createTextNode(vbCrLf)
End Sub

  結(jié)論

  本文僅僅揭示XML編程的表面,本文的例子中的涉及只是非常簡(jiǎn)單的XML文件,但你可以使用使用本文揭示的技術(shù)做更多的事情,比如配置設(shè)置、表單位置、以及其他信息。XML已經(jīng)向前更進(jìn)一步的發(fā)展了,有了更復(fù)雜的數(shù)據(jù)層次。對(duì)于更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在運(yùn)行時(shí)可以更容易的使用MSXML對(duì)象來存取XML文件

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
波多野结衣在线一区| 亚洲午夜精品一区二区三区他趣| 日韩码欧中文字| 日韩不卡一区二区| 成人高清视频在线观看| 亚洲精品在线二区| 91成人在线精品| 中文文精品字幕一区二区| 亚洲国产成人高清精品| 972aa.com艺术欧美| 久久中文精品| 中文字幕av一区二区三区| 日本不卡一二三| 午夜精品av| 欧美日韩久久久一区| 国产精品久久99| 国产成人午夜精品影院观看视频| 在线一区亚洲| 国产日韩精品久久久| 久久 天天综合| 亚洲欧美久久久| 国产欧美一区二区三区在线老狼| 久久99国产精品尤物| 亚洲一区二区高清视频| 国产欧美一区二区精品忘忧草| 精品亚洲aⅴ乱码一区二区三区| 亚洲精品视频啊美女在线直播| 欧美大尺度电影在线| 日本亚洲视频在线| 亚洲少妇一区| 亚洲同性同志一二三专区| 成人一区在线观看| 欧美日韩一区二区三区在线看| 亚洲伊人色欲综合网| 欧美精品午夜| 精品久久国产字幕高潮| 激情五月婷婷综合网| 美女成人午夜| 一区二区三区欧美久久| 激情欧美丁香| 国产亚洲一区字幕| 成人高清免费在线播放| 欧美人与性动xxxx| 日本三级亚洲精品| 国产欧美另类| ...av二区三区久久精品| 女同性一区二区三区人了人一| 日韩精品一区二区三区三区免费| 精品亚洲国产成人av制服丝袜| 久久综合福利| 午夜精品久久久久久久蜜桃app| 国产欧美日韩综合一区在线观看 | 欧美日韩hd| 久久久久久久久久久99999| 成人av电影在线| 日韩欧美亚洲一区二区| 国产黄色91视频| 91精品在线免费| 国产在线不卡一区| 欧美一区永久视频免费观看| 国产美女久久久久| 在线观看91av| 国产成人免费xxxxxxxx| 日韩一区二区中文字幕| 国产传媒欧美日韩成人| 精品国产乱码久久久久久浪潮| 国产精品18久久久久久vr| 欧美日韩成人在线一区| 国产精品白丝jk黑袜喷水| 91精品国模一区二区三区| 粉嫩一区二区三区性色av| 欧美变态口味重另类| 色综合中文字幕国产 | 精品国产伦一区二区三区观看体验| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产三级欧美三级| 国产精品va| 亚洲综合图片区| 在线观看视频一区二区| 国产精品乡下勾搭老头1| 久久久久久久综合色一本| 欧美日韩一区二区视频在线 | 91国偷自产一区二区使用方法| 精彩视频一区二区三区| 欧美变态tickling挠脚心| 午夜欧美精品久久久久久久| 亚洲欧洲国产专区| 久久精品天堂| 国产精品白丝jk黑袜喷水| 欧美韩国日本一区| 国产精品视频久久一区| 久久国产人妖系列| 久久综合九色欧美综合狠狠| 99国产精品久久久久老师| 免费观看91视频大全| 欧美精品一区二区三区四区| 亚洲成色精品| 经典三级在线一区| 国产欧美日韩不卡| 久久久人人人| av一区二区不卡| 亚洲资源中文字幕| 日韩欧美色综合| 99日韩精品| 国产黄色91视频| 一区二区三区四区国产精品| 3d成人h动漫网站入口| 狠狠综合久久| 韩国三级在线一区| 中文字幕一区二区三区视频| 欧美图片一区二区三区| 欧美不卡高清| 麻豆精品国产91久久久久久| 国产色婷婷亚洲99精品小说| 日本韩国精品在线| 欧美在线三级| 久久99国产乱子伦精品免费| 国产精品麻豆久久久| 欧美日韩精品欧美日韩精品一| 激情国产一区| 国产福利电影一区二区三区| 亚洲国产一区在线观看| 久久久另类综合| 欧美图片一区二区三区| 91久久在线| av中文字幕一区| 久久av老司机精品网站导航| 亚洲天堂免费看| 精品理论电影在线| 日本韩国一区二区| 日韩午夜激情| 欧美日韩国产色综合一二三四| 激情久久久久久久久久久久久久久久| 成人欧美一区二区三区小说 | 一区二区精品| 91麻豆国产在线观看| 久久er精品视频| 亚洲午夜久久久久久久久久久 | 性欧美videos另类喷潮| 国产精品99一区二区| 国产69精品久久久久毛片| 日韩高清不卡一区二区| 亚洲精品高清在线观看| 中文字幕免费在线观看视频一区| 91麻豆精品久久久久蜜臀| 免费久久99精品国产自在现线| 激情亚洲网站| 欧美三级免费| 色综合视频一区二区三区高清| 国产91精品免费| 国产美女精品在线| 另类小说图片综合网| 丝袜美腿一区二区三区| 亚洲综合一区二区三区| 亚洲女子a中天字幕| 国产精品福利一区二区| 久久久噜噜噜久久中文字幕色伊伊 | 大桥未久av一区二区三区中文| 久久国产精品无码网站| 日本aⅴ亚洲精品中文乱码| 亚洲亚洲人成综合网络| 一个色在线综合| 一区二区在线观看av| 亚洲免费av高清| 亚洲乱码中文字幕综合| 亚洲视频1区2区| 亚洲欧美日韩国产成人精品影院| 国产精品国产自产拍高清av王其 | 亚洲人成毛片在线播放女女| 国产综合久久| 激情婷婷久久| 国产精品毛片在线| 欧美专区一区二区三区| 麻豆久久婷婷| 在线观看国产精品网站| 欧美影院精品一区| 欧美美女网站色| 欧美一级片在线看| 精品处破学生在线二十三| 久久久91精品国产一区二区精品| 国产日韩欧美综合一区| 中文字幕在线不卡视频| 有坂深雪av一区二区精品| 亚洲国产乱码最新视频| 日韩中文字幕麻豆| 国产一区二区三区在线观看免费视频 | 久久亚洲精选| 欧美精品 国产精品| 精品国产乱码久久久久久浪潮| 国产午夜亚洲精品午夜鲁丝片| 国产精品美女久久久久高潮| 亚洲一区二区视频在线观看| 麻豆精品一区二区三区| 国产福利一区二区三区视频| 91丨九色丨黑人外教| 亚洲激情另类| 欧美性一级生活| 久久免费看少妇高潮| 亚洲激情在线激情| 九九在线精品视频|