版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、圣思園科技 HYPERLINK http:/w/ http:/wDOM和SAXW3C制定了一套書寫XML分析器的標(biāo)準(zhǔn)接口規(guī)范-DOM。除此之外, XML_DEV郵件列表中的成員根據(jù)應(yīng)用的需求也自發(fā)地定義了一套對(duì)XML文檔進(jìn)行操作的接口規(guī)范-SAX。這兩種接口規(guī)范各有側(cè)重,互有長(zhǎng)短,應(yīng)用都比較廣泛。下面,給出DOM和SAX在應(yīng)用程序開發(fā)過(guò)程中所處地位的示意圖。從圖中可以看出,應(yīng)用程序不是直接對(duì)XML文檔進(jìn)行操作的,而是首先由XML分析器對(duì)XML文檔進(jìn)行分析,然后,應(yīng)用程序通過(guò)XML分析器所提供的DOM接口或SAX接口對(duì)分析結(jié)果進(jìn)行操作,從而間接地實(shí)現(xiàn)了對(duì)XML文檔的。DOMDOM的全稱是程序中,
2、基于DOMObject M析器將一個(gè)XM,也即文檔對(duì)象模型。在應(yīng)用檔轉(zhuǎn)換成一個(gè)對(duì)象模型的集合(通常稱DOM樹),應(yīng)用程序正是通過(guò)對(duì)這個(gè)對(duì)象模型的操作,來(lái)實(shí)現(xiàn)對(duì)XML文檔數(shù)據(jù)的操作。通過(guò)DOM接口,應(yīng)用程序可以在任何時(shí)候任何一部分?jǐn)?shù)據(jù),因此,這種利用DOM接口的機(jī)制也被稱作隨機(jī)XML文檔中的機(jī)制。DOM接口提供了一種通過(guò)分層對(duì)象模型來(lái)XML文檔信息的方式,這些分層對(duì)象模型依據(jù)XML的文檔結(jié)構(gòu)形成了一棵節(jié)點(diǎn)樹。無(wú)論XML文檔中所描述的是什么類型的信息,即便是制表數(shù)據(jù)、項(xiàng)目列表或一個(gè)文檔,利用DOM所生成的模型都是節(jié)點(diǎn)樹的形式。也就是說(shuō),DOM強(qiáng)制使用樹模型來(lái)XML文檔中的信息。由于XML本質(zhì)上就是
3、一種分層結(jié)構(gòu),所以這種描述方法是相當(dāng)有效的。DOM樹所提供的隨機(jī)方式給應(yīng)用程序的開發(fā)帶來(lái)了很大的靈活性,它可以任意地XML文檔中的內(nèi)容。然而,由于DOM分析器把整個(gè)XML文檔轉(zhuǎn)化成DOM樹放在了內(nèi)存中,因此,當(dāng)文檔比較大或者結(jié)構(gòu)比較復(fù)雜時(shí),對(duì)內(nèi)存的需求就比較高。而且,對(duì)于結(jié)構(gòu)復(fù)雜的樹的遍歷也是一項(xiàng)耗時(shí)的操作。所以,DOM分析器對(duì)機(jī)器性能的要求比較高,實(shí)現(xiàn)效率不十分理想。不過(guò),由于DOM分析器所采用的樹結(jié)構(gòu)的與XML文檔的結(jié)構(gòu)相吻合,同時(shí)鑒于隨機(jī)所帶來(lái)的方便,因此,DOM分析器還是有很廣泛的使用價(jià)值的。DOM的組成對(duì)于XML應(yīng)用開發(fā)來(lái)說(shuō),DOM就是一個(gè)對(duì)象化的XML數(shù)據(jù)接口,一個(gè)與語(yǔ)言無(wú)關(guān)、與無(wú)
4、關(guān)的標(biāo)準(zhǔn)接口規(guī)范。它定義了HTML文檔和XML文檔的邏輯結(jié)構(gòu),給出了一種和處理HTML文檔和XML文檔的方法。利用DOM,程序開發(fā)可以動(dòng)態(tài)地創(chuàng)建文檔,遍歷文檔結(jié)構(gòu),添加、修改、刪除文檔內(nèi)容,改變文檔的顯示方式等等。可以這樣說(shuō),文檔代表的是數(shù)據(jù),而DOM則代表了如何去處理這些數(shù)據(jù)。無(wú)論是在瀏覽器里還是在瀏覽器外,無(wú)論是在服務(wù)器上還是在客戶端,只要有用到XML的地方,就會(huì)碰到對(duì)DOM的應(yīng)用。作為W3C的標(biāo)準(zhǔn)接口規(guī)范,目前,DOM由三部分組成,包括:(core)、HTML和XML。部分是結(jié)構(gòu)化文檔比較底層對(duì)象的集合,這一部分所定義的對(duì)象已經(jīng)完全可以表達(dá)出任何HTML和XML文檔中的數(shù)據(jù)了。HTML接
5、口和XML接口兩部分則是專為操作具體的HTML文檔和 XML文檔所提供的高級(jí)接口,使對(duì)這兩類文件的操作更加方便。DOM樹=1.0 encoding=gb2312?xml ver/?xml ver=1.0 encoding=gb2312 ?至尊寶倘若時(shí)光倒流月光寶盒實(shí)用大全booksbookbookauthorauthortitletitle倘若時(shí)光倒流至尊寶月光寶盒實(shí)用大全文本元素根元素節(jié)點(diǎn)文檔(根節(jié)點(diǎn))最常見(jiàn)的節(jié)點(diǎn)類型:元素:元素是 XML 的基本構(gòu)件。典型地,元素可以有其它元素、文本節(jié)點(diǎn)或兩者兼有來(lái)作為其子節(jié)點(diǎn)。元素節(jié)點(diǎn)還是可以有屬性的唯一類型的節(jié)點(diǎn)。屬性:屬性節(jié)點(diǎn)包含關(guān)于元素節(jié)點(diǎn)的信息,
6、但實(shí)際上,不認(rèn)為它是元素的子節(jié)點(diǎn)文本:確切來(lái)講,文本節(jié)點(diǎn)是:文本。它可以包含許多信息或僅僅是空白。文檔(根節(jié)點(diǎn)):文檔節(jié)點(diǎn)是整個(gè)文檔中所有其它節(jié)點(diǎn)的父節(jié)點(diǎn)。(根節(jié)點(diǎn)不等于根元素節(jié)點(diǎn)!)較不常見(jiàn)的節(jié)點(diǎn)類型:CDATA、注釋、處理指令DOM的四個(gè)基本接口文檔對(duì)象模型利用對(duì)象來(lái)把文檔模型化,這些模型不僅描述了文檔的結(jié)構(gòu),還定義了模型中對(duì)象的行為。換句話說(shuō),在上面給出的例子里,圖中的節(jié)點(diǎn)不是數(shù)據(jù)結(jié)構(gòu),而是對(duì)象,對(duì)象中包含方法和屬性。在DOM中,對(duì)象模型要實(shí)現(xiàn):用來(lái)表示、操作文檔的接口接口的行為和屬性接口之間的關(guān)系以及互操作在DOM接口規(guī)范中,有四個(gè)基本的接口:以及NamedNodeMap。在這四個(gè)基本
7、接口中,Node,N接口是對(duì)文ist進(jìn)行操作的 父類,象是從Node,它是從Node接口繼承過(guò)來(lái)的。No其他大多數(shù)接口的,Elemen過(guò)來(lái)的。Ntribute,Text,Comment等接口都st接口是一個(gè)節(jié)點(diǎn)的集合,它包含了某 deMap接口也是一個(gè)節(jié)點(diǎn)的集合,通過(guò)該個(gè)節(jié)點(diǎn)中的所有子節(jié)點(diǎn)。Name接口,可以建立節(jié)點(diǎn)名和節(jié)點(diǎn)之間的一一關(guān)系,從而利用節(jié)點(diǎn)名可以直接特定的節(jié)點(diǎn)。接口接口代表了整個(gè)XML/HTML文檔,因此,它是整棵文檔樹的根,提供了對(duì)文據(jù)進(jìn)行和操作的。由于元素、文本節(jié)點(diǎn)、注釋、處理指令等都不能脫離文檔的上下文關(guān)系而獨(dú)立存在,所以在有一個(gè)接口提供了創(chuàng)建其他節(jié)點(diǎn)對(duì)象的方法,通過(guò)該方法創(chuàng)
8、建的節(jié)點(diǎn)對(duì)象都屬性,用來(lái)表明當(dāng)前節(jié)點(diǎn)是由誰(shuí)所創(chuàng)建的以及節(jié)點(diǎn)同之間在DOM樹中,接口同其他接口之間的關(guān)系如下圖所示:Node接口Node接口在整個(gè)DOM樹具有舉足輕重的地位,D M接口有很大一部分接口是從Node接口繼承過(guò)來(lái)的,例如,Elementr、CDATASection等接口,都是從Node繼承過(guò)來(lái)的。在DOM樹中,Node接接口如下圖所示:表了樹中的一個(gè)節(jié)點(diǎn)。一個(gè)典型的NodeNist接口N節(jié)點(diǎn)集ist接口提供了對(duì)節(jié)點(diǎn)集合的抽象定義,它并不含如何實(shí)現(xiàn)這個(gè)定義。Nist用于表示有順序關(guān)系的一組節(jié)點(diǎn),比如某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)序列。另外,它還出現(xiàn)在一些方法的返回值中,例如geementsByTag
9、Name。在DOM中,N會(huì)直接反映到相ist的對(duì)象是live的,換句話說(shuō),對(duì)文檔的改變, ist對(duì)象中。例如,如果通過(guò)DOM獲得一個(gè)N那ist對(duì)象,該對(duì)包含了某個(gè)Element節(jié)點(diǎn)的所有子節(jié)點(diǎn)的集合,當(dāng)再通過(guò)DOM對(duì)Element節(jié)點(diǎn)進(jìn)行操作(添加、刪除、改動(dòng)節(jié)點(diǎn)中的子節(jié)點(diǎn))時(shí),這些改變將會(huì)自動(dòng)地反映到N程序再做其他額外的操作。ist對(duì)象中,而不需DOM應(yīng)用ist中的每個(gè)item都可以通過(guò)一個(gè)索引來(lái),該索引值從0開始。NNamedNodeMap接口實(shí)現(xiàn)了NamedNodeMap接口的對(duì)象含了可以通過(guò)名字來(lái)的一組節(jié)點(diǎn)的集合。不過(guò)注意,NamedNodeMap并不是從Nist繼承過(guò)來(lái)的,它所包含的
10、節(jié)點(diǎn)集中的節(jié)點(diǎn)是無(wú)序的。盡管這些節(jié)點(diǎn)也可以通過(guò)索引來(lái)進(jìn)行,但這只是提供了枚舉NamedNodeMap中所包含節(jié)點(diǎn)的一種簡(jiǎn)單方法,并不表明在DOM規(guī)范中為NamedNodeMap中的節(jié)點(diǎn)規(guī)定了一種排列順序。NamedNodeMap表示的是一組節(jié)點(diǎn)和其唯一名字的一一對(duì)應(yīng)關(guān)系,這個(gè)接口主要用在屬性節(jié)點(diǎn)的表示上。與Nist相同,在DOM中,NamedNodeMap對(duì)象也是live的。XML器實(shí)際上就是一段代碼,它讀入一個(gè)XML文檔并分析其結(jié)構(gòu)。應(yīng)用程序分類:器帶校驗(yàn)的不校驗(yàn)的器器(效率高)XML文檔支持DOM的支持SAX的器(W3C的標(biāo)準(zhǔn) )器(事實(shí)上的工業(yè)標(biāo)準(zhǔn) )文檔對(duì)象模型XML文檔,為XML文檔
11、在邏輯上建通過(guò)立一個(gè)樹模型,樹的節(jié)點(diǎn)是一個(gè)個(gè)對(duì)象,通 過(guò)存取這些對(duì)象就能夠存取XML文檔的內(nèi)容。XML文檔DOM器一切都是節(jié)點(diǎn)(對(duì)象)Node對(duì)象:DOM結(jié)構(gòu)中最為基本的對(duì)象對(duì)象:代表整個(gè)XML的文檔Nist對(duì)象:包含一個(gè)或者多個(gè)Node的列表Element對(duì)象:代表XML文檔中的元素candidate.xml?xml ver=1.0?NistTony Blair10 Downing Street, London,UK(061) 98765(061) 98765blNodeElementBuilderBuilderFactoryimport javax.xml.parsers.*;import
12、.w3c.dom.*;public class dom public sic void main(String args) tryBuilderFactory factory = BuilderFactory.newInstance(); Builder builder=factory.newBuilder();doc=build ist nl =doc.gearse(candidate.xml);NementsByTagName();for (i=0;inl.getLength();i+)Element node=(Element) nl.item(i);System.out.pr(NAME
13、: ); System.out.prln(node.geValue();ementsByTagName(NAME).item(0).getChild().getNodeSystem.out.prln();catch(Exception e)e.prStackTrace();Good-bye serialization,o Java!下面,需要把這個(gè)文檔的內(nèi)容到一個(gè)個(gè)的Java對(duì)象中去供程序使用,利用JAXP,首先,只需幾行代碼就能做到這一點(diǎn)。需要建立一個(gè)器工廠,以利用這個(gè)工廠來(lái)獲得一個(gè)具體的象器對(duì)BuilderFactory dbf = BuilderFactory.newInstance()
14、;BuilderFacotry的目在這里使用的是為了創(chuàng)建與具體器無(wú)關(guān)的程序,當(dāng)BuilderFactory 類的靜態(tài)方法newInstance()被調(diào)用時(shí),它根據(jù)一個(gè)系統(tǒng)變量來(lái)決定具體使用哪一個(gè)器。又因?yàn)樗械慕馕銎鞫挤挠贘AXP所定義的接口,所 以無(wú)論具體使用哪一個(gè)器,代碼都是一樣的。所以當(dāng)在不同的器之間進(jìn)行切換時(shí),只需要更改系統(tǒng)變量的值,而不用更改任何代碼。這就是工廠所帶來(lái)的好處。Builder db =Builder();dbf.new當(dāng)獲得一個(gè)工廠對(duì)象后,使用它的靜態(tài)方法new一個(gè)Builder()方法可以獲得Builder對(duì)象,這個(gè)對(duì)象代表了具體的DOM器。但具體是哪一種器,微軟的
15、或者IBM的,對(duì)于程序而言并不重要器來(lái)對(duì)XML文檔然后,進(jìn)行就可以利用這個(gè)了doc = db.parse(c:/xml/message.xml);Builder的parse()方法接受一個(gè)XML文檔名作為輸入?yún)?shù),返回一個(gè)對(duì)象,對(duì)象就代表了一個(gè)XML文檔的樹這個(gè)模型。以后所有的對(duì)XML文檔的操作,都與器無(wú)關(guān),直接在這個(gè)就可以了。而具體對(duì)是由DOM所定義的了對(duì)象上進(jìn)行操作操作的方法,就從上面得到的對(duì)象開始,了。使用就的DOM對(duì)象的可以開始geementsByTagName()方法,可以得到一個(gè)Nist對(duì)象,一個(gè)Node對(duì)象代表了一個(gè)XML文檔中的一個(gè)元素,而N的列表ist對(duì)象,所代表的是一個(gè)No
16、de對(duì)象Nist nl =doc.ge ge);ementsByTagName(messa通過(guò)這樣一條語(yǔ)句所得到的是XML文檔中所有象的一個(gè)列表。然后,對(duì)應(yīng)的Node對(duì)可以使用Nist對(duì)象的item()方法來(lái)得到列表中的每一個(gè)Node對(duì)象Node my_node = nl.item(0);當(dāng)一個(gè)Node對(duì)象被建立之后,保存在XML文檔中的數(shù)據(jù)就被提取出來(lái)并封裝在這個(gè) Node中了。在這個(gè)例子中,要提取Message內(nèi)的內(nèi)容,通常會(huì)使用Node對(duì)象的getNodeValue()方法String message =my_node.get e();Child().getNodeValu請(qǐng)注意,這里還
17、使用了一個(gè)getChild()方法來(lái)獲得message下面的第一個(gè)子Node對(duì)象。雖然在message下面除了文本外并沒(méi)有其它子或者屬性,但堅(jiān)持在這里使用getChild()方是法,這主要和W3C對(duì)DOM的定義有關(guān)。W3C把內(nèi)的文本部分也定義成一個(gè)Node,所以先要得到代表文本的那個(gè)Node,才能夠使用getNodeValue()來(lái)獲取文本的內(nèi)容已經(jīng)能夠從XML文件中提就可以把這些數(shù)據(jù)用在現(xiàn)在,既然取出數(shù)據(jù)了,合適的地方,來(lái)構(gòu)筑應(yīng)用程序DOM的基本對(duì)象有5個(gè):,Node,Nisement和Attr對(duì)象代表了整個(gè)XML的文檔,所有其它的Node,都以一定的順序包含在對(duì)象之內(nèi),排列成一個(gè)樹形的結(jié)構(gòu)
18、,程序員可以通過(guò)遍歷這顆樹來(lái)得到XML文檔的所有的內(nèi)容,這也是對(duì)XML文檔操作的起點(diǎn)。XML源文件而得到一個(gè)后再來(lái)執(zhí)行后續(xù)的操作。此外,總是先通過(guò)對(duì)象,然還包含了創(chuàng)建其它節(jié)點(diǎn)的方法,比如createAttribute()用來(lái)創(chuàng)建一個(gè)Attr對(duì)象。它所包含的主要的方法有createAttribute(String):用給定的屬性名創(chuàng)建一個(gè)Attr對(duì)象,并可在其后使用setributeNode方法來(lái)放置在某一個(gè)Element對(duì)象上面。createElement(String):用給定的名創(chuàng)建一個(gè)Element對(duì)象,代表XML文檔中的一個(gè),然后就可以在這個(gè)Element對(duì)象上添加屬性或進(jìn)行其它的操作
19、。 createTextNode(String):用給定的字符串創(chuàng)建一個(gè)Text對(duì)象,Text對(duì)象代表了或者屬性中所包含的純文本字符串。如果在一個(gè)內(nèi)沒(méi)內(nèi)的文本所代表的Text有其它的,那么對(duì)象是這個(gè)Element對(duì)象的唯一子對(duì)象。geementsByTagName(String):返回一個(gè)Nist對(duì)象,它包含了所有給定。名字的getElement():返回一這個(gè)DOM樹的根元素節(jié)點(diǎn)的Element對(duì)象,也就是代表XML文檔根元素的那個(gè)對(duì)象。Node對(duì)象是DOM結(jié)構(gòu)中最為基本的對(duì)象,代表了文檔樹中的一個(gè)抽象的節(jié)點(diǎn)。在實(shí)際使用的時(shí)候,很少會(huì)真正的用到Node這個(gè)對(duì)象,而是用到諸如Elementr、
20、Text等Node對(duì)象的子對(duì)象來(lái)操作文檔。Node對(duì)象為這些對(duì)象提供了一個(gè)抽象的、公共的根。雖然在Node對(duì)象中定義了對(duì)其子節(jié)點(diǎn)進(jìn)行存取的方法,但是有一些Node子對(duì)象,比如Text對(duì)象,它并不存在子節(jié)點(diǎn),這一點(diǎn)是要注意的。Node對(duì)象所包含的主要的方法有appendChild(.w3c.dom.Node):為這個(gè)節(jié)點(diǎn)添加一個(gè)子節(jié)點(diǎn),并放在所有子節(jié)點(diǎn)的最后,如果這個(gè)子節(jié)點(diǎn)已經(jīng)存在,則先把它刪掉再添加進(jìn)去。getChild():如果節(jié)點(diǎn)存在子節(jié)點(diǎn),則返回第一個(gè)子節(jié)點(diǎn),對(duì)等的,還有g(shù)etLastChild()方法返回最后一個(gè)子節(jié)點(diǎn)。getNextSibling():返回在DOM樹中這個(gè)節(jié)點(diǎn)的下一個(gè)
21、兄弟節(jié)點(diǎn),對(duì)等的,還有g(shù)etPreviousSibling()方法返回其前一個(gè)兄弟節(jié)點(diǎn)。getNodeName():根據(jù)節(jié)點(diǎn)的類型返回節(jié)點(diǎn)的名稱。 getNodeType():返回節(jié)點(diǎn)的類型。getNodeValue():返回節(jié)點(diǎn)的值。hasChildNodes():判斷是不是存在有子節(jié)點(diǎn)。hasAttributes():判斷這個(gè)節(jié)點(diǎn)是否存在有屬性。getOwner():返回節(jié)點(diǎn)所處的對(duì)象。insertBefore(.w3c.dom.Node new,.w3c.dom.Node ref):在給定的一個(gè)子對(duì)象前再一個(gè)子對(duì)象。removeChild(定的子節(jié)點(diǎn)對(duì)象.w3c.dom.Node):刪除給replaceChild(.w3c.dom.Node new,.w3c.dom.Node old):用一個(gè)新的Node對(duì)象代替給定的子節(jié)點(diǎn)對(duì)象。Nist對(duì)象,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 本合同采用計(jì)稅方法
- 保險(xiǎn)行業(yè)協(xié)會(huì) 比例合同范本
- 骨折的應(yīng)急預(yù)案
- 新生兒窒息亞低溫治療
- 《船用眼環(huán)》規(guī)范
- 貴州省貴陽(yáng)市觀山湖區(qū)美的中學(xué)2024-2025學(xué)年度七年級(jí)上學(xué)期期中質(zhì)量監(jiān)測(cè)生物學(xué)試卷
- 上門美甲相關(guān)行業(yè)投資方案
- 物聯(lián)網(wǎng)基本知識(shí)
- 糖尿病健康宣教情景模擬
- 流行病學(xué)樣本量
- 食品生產(chǎn)許可培訓(xùn)考核試題及答案
- 農(nóng)業(yè)銀行財(cái)務(wù)報(bào)表分析報(bào)告
- 語(yǔ)文第13課《紀(jì)念白求恩》課件-2024-2025學(xué)年統(tǒng)編版語(yǔ)文七年級(jí)上冊(cè)
- 人教版(2024新版)七年級(jí)上冊(cè)英語(yǔ) Unit 1 You and Me 單元測(cè)試卷(含答案解析)
- 人教版(2024)七年級(jí)上冊(cè)生物全冊(cè)教學(xué)設(shè)計(jì)
- 2024-2030年真空鍍膜行業(yè)經(jīng)營(yíng)效益分析及投資價(jià)值戰(zhàn)略規(guī)劃研究報(bào)告
- 按摩店合作合同(2篇)
- DB11T 2324-2024腳手架鋼板立網(wǎng)防護(hù)應(yīng)用技術(shù)規(guī)程
- 11 對(duì)人有禮貌 教學(xué)設(shè)計(jì)-2024-2025學(xué)年道德與法治一年級(jí)上冊(cè)統(tǒng)編版
- 教育軟件在線購(gòu)買與使用授權(quán)協(xié)議
- 三化一穩(wěn)定嚴(yán)進(jìn)嚴(yán)出專案報(bào)告
評(píng)論
0/150
提交評(píng)論