主頁(yè) > 知識(shí)庫(kù) > Xpath語(yǔ)法格式總結(jié)

Xpath語(yǔ)法格式總結(jié)

熱門(mén)標(biāo)簽:鐵路電話(huà)系統(tǒng) 網(wǎng)站文章發(fā)布 智能手機(jī) 銀行業(yè)務(wù) 服務(wù)器配置 呼叫中心市場(chǎng)需求 美圖手機(jī) 檢查注冊(cè)表項(xiàng)

經(jīng)常在工作中會(huì)使用到XPath的相關(guān)知識(shí),但每次總會(huì)在一些關(guān)鍵的地方不記得或不太清楚,所以免不了每次總要查一些零碎的知識(shí),感覺(jué)即很煩又浪費(fèi)時(shí)間,所以對(duì)XPath歸納及總結(jié)一下。

在這篇文章中你將能學(xué)習(xí)到:

XPath簡(jiǎn)介

XPath 路徑表達(dá)式詳解

XPath在DOM,XSLT及XQuery中的應(yīng)用

XPath簡(jiǎn)介

XPath是W3C的一個(gè)標(biāo)準(zhǔn)。它最主要的目的是為了在XML1.0或XML1.1文檔節(jié)點(diǎn)樹(shù)中定位節(jié)點(diǎn)所設(shè)計(jì)。目前有XPath1.0和XPath2.0兩個(gè)版本。其中Xpath1.0是1999年成為W3C標(biāo)準(zhǔn),而XPath2.0標(biāo)準(zhǔn)的確立是在2007年。W3C關(guān)于XPath的英文詳細(xì)文檔請(qǐng)見(jiàn):http://www.w3.org/TR/xpath20/ 。

XPath是一種表達(dá)式語(yǔ)言,它的返回值可能是節(jié)點(diǎn),節(jié)點(diǎn)集合,原子值,以及節(jié)點(diǎn)和原子值的混合等。XPath2.0是XPath1.0的超集。它是對(duì)XPath1.0的擴(kuò)展,它可以支持更加豐富的數(shù)據(jù)類(lèi)型,并且XPath2.0保持了對(duì)XPath1.0的相對(duì)很好的向后兼容性,幾乎所有的XPath2.0的返回結(jié)果都可以和XPath1.0保持一樣。另外XPath2.0也是XSLT2.0和XQuery1.0的用于查詢(xún)定位節(jié)點(diǎn)的主表達(dá)式語(yǔ)言。XQuery1.0是對(duì)XPath2.0的擴(kuò)展。關(guān)于在XSLT和XQuery中使用XPath表達(dá)式定位節(jié)點(diǎn)的知識(shí)在后面的實(shí)例中會(huì)有所介紹。

在學(xué)習(xí)XPath之前你應(yīng)該對(duì)XML的節(jié)點(diǎn),元素,屬性,原子值(文本),處理指令,注釋?zhuān)?jié)點(diǎn)(文檔節(jié)點(diǎn)),命名空間以及對(duì)節(jié)點(diǎn)間的關(guān)系如:父(Parent),子(Children),兄弟(Sibling),先輩(Ancestor),后代(Descendant)等概念有所了解。這里不在說(shuō)明。

XPath路徑表達(dá)式

在本小節(jié)下面的內(nèi)容中你將可以學(xué)習(xí)到:

路徑表達(dá)式語(yǔ)法

相對(duì)/絕對(duì)路徑

表達(dá)式上下文

謂詞(篩選表達(dá)式)及軸的概念

運(yùn)算符及特殊字符

常用表達(dá)式實(shí)例

函數(shù)及說(shuō)明

這里給出一個(gè)實(shí)例Xml文件。下面的說(shuō)明及實(shí)例都是基于該XML文件。

?xml version="1.0" encoding="UTF-8"?>
!-- edited with XMLSpy v2008 rel. 2 sp2 (http://www.altova.com) by Administrator -->
?xml-stylesheet type="text/xsl" href="messages.xsl" rel="external nofollow" ?>
messages>
 message id="1">
 sender>gukaitong@gmail.com/sender>
 to>anonymous@gmail.com
 group name="IT">
 address>111@gmail.com/address>
 address>222@gmail.com/address>
 address>aaa@gmail.com/address>
 address>bbb@gmail.com/address>
 address>ccc@gmail.com/address>
 /group>
 /to>
 subject>This is a sample/subject>
 datetime date="2008-12-11" time="12:00:00" formatted="12/11/2008 12:00AM">2008-12-11T12:00:00Z/datetime>
 body>
 Are you interested in? 
 attachments>
 attachment id="1">
  message id="0">
  sender>anonymous@gmail.com/sender>
  to>gukaitong@gmail.com/to>
  body>
We strongly recommend the following books
  books xmlns:amazon="http://www.amazon.com/books/schema">
  amazon:book>
   name>Professional C# 2008 /name>
   country>USA/country>
   price>37.79/price>
   year>2007/year>
  /amazon:book>
  amazon:book>
   name>Microsoft Visual C# 2008 Step by Step /name>
   country>USA/country>
   price>26.39 /price>
   year>2008/year>
  /amazon:book>
  amazon:book>
   name>C# in Depth/name>
   country>USA/country>
   price>29.69 /price>
   year>2006/year>
  /amazon:book>
  amazon:book>
   name>Thinking in Java/name>
   country>USA/country>
   price>23.69 /price>
   year>2004/year>
  /amazon:book>
  /books>
  /body>
  /message>
 /attachment>
 /attachments>
 /body>
 /message>
 message id="2">
 sender>333@gmail.com/sender>
 to>444@gmail.com/to>
 subject>No title/subject>
 body/>
 /message>
/messages>

路徑表達(dá)式語(yǔ)法:

路徑 = 相對(duì)路徑 | 絕對(duì)路徑

XPath路徑表達(dá)式 = 步進(jìn)表達(dá)式 | 相對(duì)路徑 "/"步進(jìn)表達(dá)式。

步進(jìn)表達(dá)式=軸 節(jié)點(diǎn)測(cè)試 謂詞

說(shuō)明:

其中軸表示步進(jìn)表達(dá)式選擇的節(jié)點(diǎn)和當(dāng)前上下文節(jié)點(diǎn)間的樹(shù)狀關(guān)系(層次關(guān)系),節(jié)點(diǎn)測(cè)試指定步進(jìn)表達(dá)式選擇的節(jié)點(diǎn)名稱(chēng)擴(kuò)展名,謂詞即相當(dāng)于過(guò)濾表達(dá)式以進(jìn)一步過(guò)濾細(xì)化節(jié)點(diǎn)集。

謂詞可以是0個(gè)或多個(gè)。多個(gè)多個(gè)謂詞用邏輯操作符and, or連接。取邏輯非用not()函數(shù)。

請(qǐng)看一個(gè)典型的XPath查詢(xún)表達(dá)式:/messages/message//child::node()[@id=0],其中/messages/message是路徑(絕對(duì)路徑以"/"開(kāi)始),child::是軸表示在子節(jié)點(diǎn)下選擇,node()是節(jié)點(diǎn)測(cè)試表示選擇所有的節(jié)點(diǎn)。[@id=0]是謂詞,表示選擇所有有屬性id并且值為0的節(jié)點(diǎn)。

相對(duì)路徑與絕對(duì)路徑:

如果"/"處在XPath表達(dá)式開(kāi)頭則表示文檔根元素,(表達(dá)式中間作為分隔符用以分割每一個(gè)步進(jìn)表達(dá)式)

如:/messages/message/subject是一種絕對(duì)路徑表示法,它表明是從文檔根開(kāi)始查找節(jié)點(diǎn)。假設(shè)當(dāng)前節(jié)點(diǎn)是在第一個(gè)message節(jié)點(diǎn)【/messages/message[1]】,則路徑表達(dá)式subject(路徑前沒(méi)有"/")這種表示法稱(chēng)為相對(duì)路徑,表明從當(dāng)前節(jié)點(diǎn)開(kāi)始查找。具體請(qǐng)見(jiàn)下面所述的"表達(dá)式上下文"。

表達(dá)式上下文(Context):

上下文其實(shí)表示一種環(huán)境。以明確當(dāng)前XPath路徑表達(dá)式處在什么樣的環(huán)境下執(zhí)行。例如同樣一個(gè)路徑表達(dá)式處在對(duì)根節(jié)點(diǎn)操作的環(huán)境和處在對(duì)某一個(gè)特定子節(jié)點(diǎn)操作的環(huán)境下執(zhí)行所獲得的結(jié)果可能是完全不一樣的。也就是說(shuō)XPath路徑表達(dá)式計(jì)算結(jié)果取決于它所處的上下文。

XPath上下文基本有以下幾種:

當(dāng)前節(jié)點(diǎn)(./):

如./sender表示選擇當(dāng)前節(jié)點(diǎn)下的sender節(jié)點(diǎn)集合(等同于下面所講的"特定元素",如:sender)
父節(jié)點(diǎn)(../):

如../sender表示選擇當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)下的sender節(jié)點(diǎn)集合

根元素(/):

如/messages表示選擇從文檔根節(jié)點(diǎn)下的messages節(jié)點(diǎn)集合.

根節(jié)點(diǎn)(/*):

這里的*是代表所有節(jié)點(diǎn),但是根元素只有一個(gè),所以這里表示根節(jié)點(diǎn)。/*的返回結(jié)果和/messages返回的結(jié)果一樣都是

messages節(jié)點(diǎn)。

遞歸下降(//):

如當(dāng)前上下文是messages節(jié)點(diǎn)。則//sender將返回以下結(jié)果:

/messages//sender :
sender>gkt1980@gmail.com/sender>
sender>111@gmail.com/sender>
sender>333@gmail.com/sender>
/messages/message[1]//sender:
sender>gkt1980@gmail.com/sender>
sender>111@gmail.com/sender>

我們可以看出XPath表達(dá)式返回的結(jié)果是:從當(dāng)前節(jié)點(diǎn)開(kāi)始遞歸步進(jìn)搜索當(dāng)前節(jié)點(diǎn)下的所有子節(jié)點(diǎn)找到滿(mǎn)足條件的節(jié)點(diǎn)集。

特定元素

如sender:表示選擇當(dāng)前節(jié)點(diǎn)下的sender節(jié)點(diǎn)集合,等同于(./sender)

注意:在執(zhí)行XPath時(shí)一定要注意上下文。即當(dāng)前是在哪個(gè)節(jié)點(diǎn)下執(zhí)行XPath表達(dá)式。這在XMLDOM中很重要。如:在XMLDOM中的selectNodes,selectSingleNode方法的參數(shù)都是一個(gè)XPath表達(dá)式,此時(shí)這個(gè)XPath表達(dá)式的執(zhí)行上下文就是調(diào)用這個(gè)方法的節(jié)點(diǎn)及它所在的環(huán)境。更多信息請(qǐng)參見(jiàn):http://www.w3.org/TR/xpath20/

謂詞(篩選表達(dá)式)及軸的概念:

XPath的謂詞即篩選表達(dá)式,類(lèi)似于SQL的where子句.

軸名稱(chēng)

結(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

直到所有這個(gè)節(jié)點(diǎn)的父輩節(jié)點(diǎn),順序選擇每個(gè)父輩節(jié)點(diǎn)前的所有同級(jí)節(jié)點(diǎn)

preceding-sibling

選取當(dāng)前節(jié)點(diǎn)之前的所有同級(jí)節(jié)點(diǎn)。

self

選取當(dāng)前節(jié)點(diǎn)。

運(yùn)算符及特殊字符:

運(yùn)算符/特殊字符

說(shuō)明

/

此路徑運(yùn)算符出現(xiàn)在模式開(kāi)頭時(shí),表示應(yīng)從根節(jié)點(diǎn)選擇。

//

從當(dāng)前節(jié)點(diǎn)開(kāi)始遞歸下降,此路徑運(yùn)算符出現(xiàn)在模式開(kāi)頭時(shí),表示應(yīng)從根節(jié)點(diǎn)遞歸下降。

.

當(dāng)前上下文。

..

當(dāng)前上下文節(jié)點(diǎn)父級(jí)。

*

通配符;選擇所有元素節(jié)點(diǎn)與元素名無(wú)關(guān)。(不包括文本,注釋?zhuān)噶畹裙?jié)點(diǎn),如果也要包含這些節(jié)點(diǎn)請(qǐng)用node()函數(shù))

@

屬性名的前綴。

@*

選擇所有屬性,與名稱(chēng)無(wú)關(guān)。

:

命名空間分隔符;將命名空間前綴與元素名或?qū)傩悦指簟?/p>

( )

括號(hào)運(yùn)算符(優(yōu)先級(jí)最高),強(qiáng)制運(yùn)算優(yōu)先級(jí)。

[ ]

應(yīng)用篩選模式(即謂詞,包括"過(guò)濾表達(dá)式"和"軸(向前/向后)")。

[ ]

下標(biāo)運(yùn)算符;用于在集合中編制索引。

|

兩個(gè)節(jié)點(diǎn)集合的聯(lián)合,如://messages/message/to | //messages/message/cc

-

減法。

div,

浮點(diǎn)除法。

and, or

邏輯運(yùn)算。

mod

求余。

not()

邏輯非

=

等于

!=

不等于

特殊比較運(yùn)算符

或者 lt;

= 或者 lt;=

> 或者 gt;

>= 或者 gt;=

需要轉(zhuǎn)義的時(shí)候必須使用轉(zhuǎn)義的形式,如在XSLT中,而在XMLDOM的scripting中不需要轉(zhuǎn)義。

常用表達(dá)式實(shí)例:

/

Document Root文檔根.

/*

選擇文檔根下面的所有元素節(jié)點(diǎn),即根節(jié)點(diǎn)(XML文檔只有一個(gè)根節(jié)點(diǎn))

/node()

根元素下所有的節(jié)點(diǎn)(包括文本節(jié)點(diǎn),注釋節(jié)點(diǎn)等)

/text()

查找文檔根節(jié)點(diǎn)下的所有文本節(jié)點(diǎn)

/messages/message

messages節(jié)點(diǎn)下的所有message節(jié)點(diǎn)

/messages/message[1]

messages節(jié)點(diǎn)下的第一個(gè)message節(jié)點(diǎn)

/messages/message[1]/self::node()

第一個(gè)message節(jié)點(diǎn)(self軸表示自身,node()表示選擇所有節(jié)點(diǎn))

/messages/message[1]/node()

第一個(gè)message節(jié)點(diǎn)下的所有子節(jié)點(diǎn)

/messages/message[1]/*[last()]

第一個(gè)message節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)

/messages/message[1]/[last()]

Error,謂詞前必須是節(jié)點(diǎn)或節(jié)點(diǎn)集

/messages/message[1]/node()[last()]

第一個(gè)message節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)

/messages/message[1]/text()

第一個(gè)message節(jié)點(diǎn)的所有子節(jié)點(diǎn)

/messages/message[1]//text()

第一個(gè)message節(jié)點(diǎn)下遞歸下降查找所有的文本節(jié)點(diǎn)(無(wú)限深度)

/messages/message[1] /child::node()

/messages/message[1] /node()

/messages/message[position()=1]/node()

//message[@id=1] /node()

第一個(gè)message節(jié)點(diǎn)下的所有子節(jié)點(diǎn)

//message[@id=1] //child::node()

遞歸所有子節(jié)點(diǎn)(無(wú)限深度)

//message[position()=1]/node()

選擇id=1的message節(jié)點(diǎn)以及id=0的message節(jié)點(diǎn)

/messages/message[1] /parent::*

Messages節(jié)點(diǎn)

/messages/message[1]/body/attachments/parent::node()

/messages/message[1]/body/attachments/parent::* /messages/message[1]/body/attachments/..

attachments節(jié)點(diǎn)的父節(jié)點(diǎn)。父節(jié)點(diǎn)只有一個(gè),所以node()和* 返回結(jié)果一樣。

(..也表示父節(jié)點(diǎn). 表示自身節(jié)點(diǎn))

//message[@id=0]/ancestor::*

Ancestor軸表示所有的祖輩,父,祖父等。

向上遞歸

//message[@id=0]/ancestor-or-self::*

向上遞歸,包含自身

//message[@id=0]/ancestor::node()

對(duì)比使用*,多一個(gè)文檔根元素(Document root)

/messages/message[1]/descendant::node()

//messages/message[1]//node()

遞歸下降查找message節(jié)點(diǎn)的所有節(jié)點(diǎn)

/messages/message[1]/sender/following::*

查找第一個(gè)message節(jié)點(diǎn)的sender節(jié)點(diǎn)后的所有同級(jí)節(jié)點(diǎn),并對(duì)每一個(gè)同級(jí)節(jié)點(diǎn)遞歸向下查找。

//message[@id=1]/sender/following-sibling::*

查找id=1的message節(jié)點(diǎn)的sender節(jié)點(diǎn)的所有后續(xù)的同級(jí)節(jié)點(diǎn)。

//message[@id=1]/datetime/@date

查找id=1的message節(jié)點(diǎn)的datetime節(jié)點(diǎn)的date屬性

//message[@id=1]/datetime[@date]

//message/datetime[attribute::date]

查找id=1的message節(jié)點(diǎn)的所有含有date屬性的datetime節(jié)點(diǎn)

//message[datetime]

查找所有含有datetime節(jié)點(diǎn)的message節(jié)點(diǎn)

//message/datetime/attribute::*

//message/datetime/attribute::node()

//message/datetime/@*

返回message節(jié)點(diǎn)下datetime節(jié)點(diǎn)的所有屬性節(jié)點(diǎn)

//message/datetime[attribute::*]

//message/datetime[attribute::node()]

//message/datetime[@*]

//message/datetime[@node()]

選擇所有含有屬性的datetime節(jié)點(diǎn)

//attribute::*

選擇根節(jié)點(diǎn)下的所有屬性節(jié)點(diǎn)

//message[@id=0]/body/preceding::node()

順序選擇body節(jié)點(diǎn)所在節(jié)點(diǎn)前的所有同級(jí)節(jié)點(diǎn)。(查找順序?yàn)椋合日业絙ody節(jié)點(diǎn)的頂級(jí)節(jié)點(diǎn)(根節(jié)點(diǎn)),得到根節(jié)點(diǎn)標(biāo)簽前的所有同級(jí)節(jié)點(diǎn),執(zhí)行完成后繼續(xù)向下一級(jí),順序得到該節(jié)點(diǎn)標(biāo)簽前的所有同級(jí)節(jié)點(diǎn),依次類(lèi)推。)

注意:查找同級(jí)節(jié)點(diǎn)是順序查找,而不是遞歸查找。

//message[@id=0]/body/preceding-sibling::node()

順序查找body標(biāo)簽前的所有同級(jí)節(jié)點(diǎn)。(和上例一個(gè)最大的區(qū)別是:不從最頂層開(kāi)始到body節(jié)點(diǎn)逐層查找。我們可以理解成少了一個(gè)循環(huán),而只查找當(dāng)前節(jié)點(diǎn)前的同級(jí)節(jié)點(diǎn))

//message[@id=1]//*[namespace::amazon]

查找id=1的所有message節(jié)點(diǎn)下的所有命名空間為amazon的節(jié)點(diǎn)。

//namespace::*

文檔中的所有的命名空間節(jié)點(diǎn)。(包括默認(rèn)命名空間xmlns:xml)

//message[@id=0]//books/*[local-name()='book']

選擇books下的所有的book節(jié)點(diǎn),

注意:由于book節(jié)點(diǎn)定義了命名空間amazone:book>.若寫(xiě)成//message[@id=0]//books/book則查找不出任何節(jié)點(diǎn)。

//message[@id=0]//books/*[local-name()='book' and namespace-uri()='http://www.amazon.com/books/schema']

選擇books下的所有的book節(jié)點(diǎn),(節(jié)點(diǎn)名和命名空間都匹配)

//message[@id=0]//books/*[local-name()='book'][year>2006]

選擇year節(jié)點(diǎn)值>2006的book節(jié)點(diǎn)

//message[@id=0]//books/*[local-name()='book'][1]/year>2006

指示第一個(gè)book節(jié)點(diǎn)的year節(jié)點(diǎn)值是否大于2006.

返回xs:boolean: true

函數(shù)及說(shuō)明:

值得欣喜的是XPath函數(shù)和XSLT,XQuery等共享函數(shù)庫(kù),函數(shù)庫(kù)為我們提供了功能豐富的各種函數(shù)的調(diào)用,我們也可以自定義自己的函數(shù)。這里不再對(duì)每個(gè)函數(shù)的用法逐一說(shuō)明,中文的可以參考這個(gè)網(wǎng)站, https://www.jb51.net/w3school/xpath/index.htm

XPath在DOM,XSLT及XQuery中的應(yīng)用

DOM:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
html xmlns="http://www.w3.org/1999/xhtml">
head>
title>XPath Test/title>
/head>
body>
script language="javascript" type="text/javascript">
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("messages.xml");
xmlDoc.setProperty("SelectionLanguage", "XPath");
 var sPath = "/messages/message[1]//books/*[local-name()='book']";
var bookNodes = xmlDoc.selectNodes(sPath);
document.write("ul>");
for ( var i = 0; i  bookNodes.length; i++) {
document.write("li>" + bookNodes[i].childNodes[0].text + "/li>");
}
document.write("/ul>");
/script>
/body>
/html>

注意:

我們?nèi)羰褂胣ew ActiveXObject("Microsoft.XMLDOM")則需要注意的是:因?yàn)樵缙诘腦MLDOM的SelectionLanguage屬性默認(rèn)是正則表達(dá)式,不是XPath語(yǔ)言。所以需要指定這樣一條語(yǔ)句xmlDoc.setProperty("SelectionLanguage", "XPath"); 以支持XPath查詢(xún)表達(dá)式。.

若沒(méi)有指定SelectionLanguage屬性值為XPath則要注意以下情況:

數(shù)組下標(biāo)從0開(kāi)始(我們知道在XPath查詢(xún)表達(dá)式中數(shù)組下標(biāo)是從1開(kāi)始的)不支持在XPath查詢(xún)表達(dá)式中使用XPath函數(shù)。

總結(jié)

以上就是本文關(guān)于Xpath語(yǔ)法格式總結(jié)的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以參閱:MYSQL updatexml()函數(shù)報(bào)錯(cuò)注入解析、OGNL表達(dá)式基本語(yǔ)法與用法詳解、前端常見(jiàn)跨域解決方案(全)等,有什么問(wèn)題可以隨時(shí)留言,歡迎大家討論交流。

您可能感興趣的文章:
  • htmlcleaner使用方法及xpath語(yǔ)法初探
  • 解析XPath語(yǔ)法之在C#中使用XPath的示例詳解
  • JQuery 選擇器 xpath 語(yǔ)法應(yīng)用

標(biāo)簽:紅河 長(zhǎng)治 樂(lè)山 滄州 河南 上海 沈陽(yáng) 新疆

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Xpath語(yǔ)法格式總結(jié)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話(huà)咨詢(xún)

    • 400-1100-266