android_中對(duì)xml_進(jìn)行解析_第1頁(yè)
android_中對(duì)xml_進(jìn)行解析_第2頁(yè)
android_中對(duì)xml_進(jìn)行解析_第3頁(yè)
android_中對(duì)xml_進(jìn)行解析_第4頁(yè)
android_中對(duì)xml_進(jìn)行解析_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、DOM解析器是通過(guò)將XML文檔解析成樹(shù)狀模型并將其放入內(nèi)存來(lái)完成解析工作的,而后對(duì)文檔的操作都是在這個(gè)樹(shù)狀模型上完成的。這個(gè)在內(nèi)存中的文檔樹(shù)將是文檔實(shí)際大小的幾倍。這樣做的好處是結(jié)構(gòu)清除、操作方便,而帶來(lái)的麻煩就是極其耗費(fèi)系統(tǒng)資源。而SAX正好克服了DOM的缺點(diǎn),分析能夠立即開(kāi)始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時(shí)檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,這對(duì)于大型文檔來(lái)說(shuō)是個(gè)巨大的優(yōu)點(diǎn)。事實(shí)上,應(yīng)用程序甚至不必解析整個(gè)文檔;它可以在某個(gè)條件得到滿足時(shí)停止解析。選擇 DOM 還是選擇 SAX,這取決于下面幾個(gè)因素:應(yīng)用程序的目的:如果打算對(duì)數(shù)據(jù)作出更改并將它輸出為 X

2、ML,那么在大多數(shù)情況下,DOM 是適當(dāng)?shù)倪x擇。并不是說(shuō)使用 SAX 就不能更改數(shù)據(jù),但是該過(guò)程要復(fù)雜得多,因?yàn)槟仨殞?duì)數(shù)據(jù)的一份拷貝而不是對(duì)數(shù)據(jù)本身作出更改。數(shù)據(jù)容量: 對(duì)于大型文件,SAX 是更好的選擇。數(shù)據(jù)將如何使用:如果只有數(shù)據(jù)中的少量部分會(huì)被使用,那么使用 SAX 來(lái)將該部分?jǐn)?shù)據(jù)提取到應(yīng)用程序中可能更好。 另一方面,如果您知道自己以后會(huì)回頭引用已處理過(guò)的大量信息,那么 SAX 也許不是恰當(dāng)?shù)倪x擇。對(duì)速度的需要: SAX 實(shí)現(xiàn)通常要比 DOM 實(shí)現(xiàn)更快?;谏厦娴姆治觯诨贏ndroid系統(tǒng)的內(nèi)存和CPU資源比較有限的手持設(shè)備上,只要我們不需要修改XML數(shù)據(jù)或者隨機(jī)的訪問(wèn)XML數(shù)據(jù),

3、SAX盡管可能需要更多的編碼工作,但是為了更小的內(nèi)存和CPU消耗,還是值得的。另外,Android SDK中已經(jīng)包含了JAXP對(duì)應(yīng)的javax.xml.parsers包,和SAX對(duì)應(yīng)org.xml.sax(當(dāng)然DOM對(duì)應(yīng)的org.w3c.dom包也包含在內(nèi)),加上Android還提供了android.sax這樣的包來(lái)方便SAX Handle的開(kāi)發(fā),基于JAXP和SAX這樣的標(biāo)準(zhǔn)方法來(lái)開(kāi)發(fā)不僅復(fù)雜度不高,即使出現(xiàn)問(wèn)題在討論組中尋求解決方案也是比較容易的。android 中的xml解析應(yīng)該是和java中一條道路 主要分為sax 解析和的Dom 解析。 如下的介紹的相關(guān)的包和類均為android 環(huán)

4、境下:sax解析對(duì)應(yīng)為:orgxmlsax 包 :xml解析兩個(gè)主要用于SAXParser的上下文建立示例如下:SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();ParseXML parX = new ParseXML();parser.parse(F:emps.xml, parX);這里的ParseXML 一般是繼承于org.xml.sax.helpers.DefaultHandler類的解析實(shí)現(xiàn)。因?yàn)镾ax 對(duì)xml的解析是基于事件類型的,也

5、就是Sax Parser逐步的讀取xml文件,然后碰到一個(gè)節(jié)點(diǎn),一個(gè)屬性,碰到一個(gè)節(jié)點(diǎn)的結(jié)束等事件都會(huì)回調(diào)哦org.xml.sax.helpers.DefaultHandler 之類的實(shí)現(xiàn),然后在Hander 的實(shí)現(xiàn)中具體解析各個(gè)節(jié)點(diǎn)名稱,屬性名稱。通過(guò)以上的特點(diǎn)可以看出sax有速度快(不需要全部的讀入內(nèi)存并構(gòu)建樹(shù)),消耗的內(nèi)存較少,線性的從上往下解析,所以它比較的適合于xml文件大,速度要求高,解析結(jié)構(gòu)自上而下 如把html展示出來(lái),xml轉(zhuǎn)為html等。Dom解析對(duì)應(yīng)為:orgw3cdom包:xml的各個(gè)元素對(duì)應(yīng)類結(jié)構(gòu)也和sax 一樣,最終的解析目標(biāo)指向org.w3c.dom.Docume

6、nt.示例如下:File docFile = new File(orders.xml);Document doc = null;DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();doc = db.parse(docFile); / get the document.因?yàn)镈om 是基于樹(shù)結(jié)構(gòu),所以要全部結(jié)構(gòu)內(nèi)容讀入內(nèi)容,構(gòu)造樹(shù),所以比較花費(fèi)時(shí)間,但是dom 的操作可以反復(fù)的來(lái)回操作,靈活性比較高,做出的程序結(jié)構(gòu)也比較容易認(rèn)可

7、,對(duì)于那些性能要求不是很高的,內(nèi)容比較少的,xml上下結(jié)構(gòu)比較復(fù)雜的用dom應(yīng)該是比較好的選擇了。因?yàn)樵陂_(kāi)發(fā)中,我們會(huì)常用到xml文件的讀寫(xiě)操作,因?yàn)槭謾C(jī)操作有很多版本問(wèn)題和很多小數(shù)據(jù)在數(shù)據(jù)庫(kù)不是良好的解決方案。所以會(huì)用到很多xml操作。 android開(kāi)發(fā)一般對(duì)xml操作常用三種技術(shù):sax、dom、pull 分別詳細(xì)的進(jìn)行介紹: 首先創(chuàng)建開(kāi)發(fā)測(cè)試壞境(一下三種方法都會(huì)使用這個(gè)環(huán)境): 在類路徑下面創(chuàng)建xml文件: person.xml 王昌龍 23 小妾 17 (我的名字and因?yàn)闆](méi)有媳婦,就假設(shè)叫小妾) 針對(duì)person創(chuàng)建javabean,(因?yàn)槲覀兿旅嬉詫?duì)象的形式獲取此xml文件內(nèi)

8、容) package cn.partner4java.xml.bean;public class Person private int id; private String name; private short age; public int getId() return id; public void setId(int id) this.id = id; public String getName() return name; public void setName(String name) = name; public short getAge() return age; public

9、 void setAge(short age) this.age = age; Override public int hashCode() final int prime = 31; int result = 1; result = prime * result + id; return result; Override public boolean equals(Object obj) if (this = obj) return true; if (obj = null) return false; if (getClass() != obj.getClass() return fals

10、e; Person other = (Person) obj; if (id != other.id) return false; return true; sax: SAX是一個(gè)解析速度快并且占用內(nèi)存少的xml解析器,非常適合用于Android等移動(dòng)設(shè)備。 SAX解析XML文件采用的是事件驅(qū)動(dòng),也就是說(shuō),它并不需要解析完整個(gè)文檔,在按內(nèi)容順序解析文檔的過(guò)程中,SAX會(huì)判斷當(dāng)前讀到的字符是否合法XML語(yǔ)法中的某部分,如果符合就會(huì)觸發(fā)事件。所謂事件,其實(shí)就是一些回調(diào)(callback)方法,這些方法(事件)定義在ContentHandler接口。下面是一些ContentHandler接口常用的方

11、法:startDocument()當(dāng)遇到文檔的開(kāi)頭的時(shí)候,調(diào)用這個(gè)方法,可以在其中做一些預(yù)處理的工作。endDocument()和上面的方法相對(duì)應(yīng),當(dāng)文檔結(jié)束的時(shí)候,調(diào)用這個(gè)方法,可以在其中做一些善后的工作。 startElement(String namespaceURI, String localName, String qName, Attributes atts) 當(dāng)讀到一個(gè)開(kāi)始標(biāo)簽的時(shí)候,會(huì)觸發(fā)這個(gè)方法。namespaceURI就是命名空間,localName是不帶命名空間前綴的標(biāo)簽名,qName是帶命名空間前綴的標(biāo)簽名。通過(guò)atts可以得到所有的屬性名和相應(yīng)的值。要注意的是SAX中

12、一個(gè)重要的特點(diǎn)就是它的流式處理,當(dāng)遇到一個(gè)標(biāo)簽的時(shí)候,它并不會(huì)紀(jì)錄下以前所碰到的標(biāo)簽,也就是說(shuō),在startElement()方法中,所有你所知道的信息,就是標(biāo)簽的名字和屬性,至于標(biāo)簽的嵌套結(jié)構(gòu),上層標(biāo)簽的名字,是否有子元屬等等其它與結(jié)構(gòu)相關(guān)的信息,都是不得而知的,都需要你的程序來(lái)完成。這使得SAX在編程處理上沒(méi)有DOM來(lái)得那么方便。endElement(String uri, String localName, String name)這個(gè)方法和上面的方法相對(duì)應(yīng),在遇到結(jié)束標(biāo)簽的時(shí)候,調(diào)用這個(gè)方法。characters(char ch, int start, int length) 這個(gè)方法

13、用來(lái)處理在XML文件中讀到的內(nèi)容,第一個(gè)參數(shù)為文件的字符串內(nèi)容,后面兩個(gè)參數(shù)是讀到的字符串在這個(gè)數(shù)組中的起始位置和長(zhǎng)度,使用new String(ch,start,length)就可以獲取內(nèi)容。不知道你看懂上面的解釋了么?那好,我們動(dòng)手做一下: 創(chuàng)建XMLContentHandler,如上面說(shuō)的應(yīng)該實(shí)現(xiàn) ContentHandler接口,但是我們這里去集成一個(gè)它的實(shí)現(xiàn)類就OL, package cn.partner4java.sax.service;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attri

14、butes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import cn.partner4java.sax.bean.Person;public class XMLContentHandler extends DefaultHandler private List persons; private Person person; private String preTag; public List getPersons() return persons; /這個(gè)方法用來(lái)處理在XML文件中讀到

15、的內(nèi)容,第一個(gè)參數(shù)為文件的字符串內(nèi)容,后面兩個(gè)參數(shù)是讀到的字符串在這個(gè)數(shù)組中的起始位置和長(zhǎng)度, /使用new String(ch,start,length)就可以獲取內(nèi)容。 Override public void characters(char ch, int start, int length) throws SAXException String data = new String(ch, start, length); if(name.equals(preTag) person.setName(data); else if(age.equals(preTag) person.setAg

16、e(new Short(data); /這個(gè)方法和上面的方法相對(duì)應(yīng),在遇到結(jié)束標(biāo)簽的時(shí)候,調(diào)用這個(gè)方法。 Override public void endElement(String uri, String localName, String qName) throws SAXException if(person.endsWith(localName) & person != null) persons.add(person); person = null; preTag = null; /和上面的方法相對(duì)應(yīng),當(dāng)文檔結(jié)束的時(shí)候,調(diào)用這個(gè)方法,可以在其中做一些善后的工作。 Override p

17、ublic void startDocument() throws SAXException persons = new ArrayList(); /當(dāng)讀到一個(gè)開(kāi)始標(biāo)簽的時(shí)候,會(huì)觸發(fā)這個(gè)方法。namespaceURI就是命名空間,localName是不帶命名空間前綴的標(biāo)簽名, /qName是帶命名空間前綴的標(biāo)簽名。通過(guò)atts可以得到所有的屬性名和相應(yīng)的值。要注意的是SAX中一個(gè)重要的特點(diǎn)就是它的流式處理, /當(dāng)遇到一個(gè)標(biāo)簽的時(shí)候,它并不會(huì)紀(jì)錄下以前所碰到的標(biāo)簽,也就是說(shuō),在startElement()方法中,所有你所知道的信息,就是標(biāo)簽的名字和屬性, /至于標(biāo)簽的嵌套結(jié)構(gòu),上層標(biāo)簽的名字,是

18、否有子元屬等等其它與結(jié)構(gòu)相關(guān)的信息,都是不得而知的, /都需要你的程序來(lái)完成。這使得SAX在編程處理上沒(méi)有DOM來(lái)得那么方便。 Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException /初始化:新建javabean if(person.equals(localName) person = new Person(); person.setId(new Integer(attributes.getValue(0);

19、 preTag = localName; SAX 支持已內(nèi)置到JDK1.5中,你無(wú)需添加任何的jar文件 書(shū)寫(xiě)service代碼: package cn.partner4java.sax.service;import java.io.InputStream;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import cn.partner4java.sax.bean.Person;public class SAXService public st

20、atic List readXML(InputStream inStream) try SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser saxParser = spf.newSAXParser(); /創(chuàng)建解析器 /設(shè)置解析器的相關(guān)特性,/sax/features/namespaces = true 表示開(kāi)啟命名空間特性 /saxParser.setProperty(/sax/features/namespaces,true); XMLContentHandler handler = new XMLContent

21、Handler(); saxParser.parse(inStream, handler); inStream.close(); return handler.getPersons(); catch (Exception e) e.printStackTrace(); return null; 進(jìn)行單元測(cè)試: package cn.partner4java.sax.junit;import java.io.InputStream;import java.util.List;import android.test.AndroidTestCase;import android.util.Log;i

22、mport cn.partner4java.sax.bean.Person;import cn.partner4java.sax.service.SAXService;public class SAXServiceTest extends AndroidTestCase private static String TAG = SAXServiceTest; public void testReadXML() InputStream inStream = this.getClass().getClassLoader().getResourceAsStream(person.xml); List

23、persons = SAXService.readXML(inStream); for(Person person:persons) System.out.println(person.getName(); Log.i(TAG, person.getName(); sax的集體操作大體就如上,沒(méi)有什么太難理解的地方,我們重載的那些方法,你不要想著我們是如何去調(diào)用的,不是,他是使用的流程裝載,也就說(shuō)會(huì)安照我們開(kāi)始解釋的那個(gè)幾個(gè)方法的作用,安步驟自動(dòng)往下走,并且方法是重復(fù)調(diào)用的,因?yàn)槲覀儀ml里面不止一個(gè)數(shù)據(jù)。android的單元測(cè)試我這里說(shuō)一下: 因?yàn)閱卧獪y(cè)試也就是黑盒測(cè)試吧,有很好的作用,能夠

24、幫助我們?nèi)フ{(diào)試代碼,避免出現(xiàn)很難解決的復(fù)雜錯(cuò)誤,因?yàn)槲覀兓径际菚?huì)每隔方法測(cè)試后,再繼續(xù)往下寫(xiě)。 我們?cè)趯?xiě)j2ee的junit是怎么樣的我就不說(shuō)了, android里面首先,要配置我們的AndroidManifest.xml 上面targetPackage指定的包要和應(yīng)用的package相同。也就說(shuō)必須相同,但是我們的單元測(cè)試可以放到此包的子包里,外面是不行的。 編寫(xiě)單元測(cè)試代碼(選擇要測(cè)試的方法,右鍵點(diǎn)擊“Run As”-“Android Junit Test” ) 你可能看到了我寫(xiě)了兩種打印的方法: System.out.println(person.getName();Log.i(TAG

25、, person.getName(); System.out.println在老版本的日志里面是不打印的(我現(xiàn)在用的最新版本可以了),所以只能用 Log。但是這兩種打印方式還是都不可以打印中文,會(huì)出現(xiàn)亂碼DOM: 除了可以使用 SAX解析XML文件,大家也可以使用熟悉的DOM來(lái)解析XML文件。 DOM解析XML文件時(shí),會(huì)將XML文件的所有內(nèi)容讀取到內(nèi)存中,然后允許您使用DOM API遍歷XML樹(shù)、檢索所需的數(shù)據(jù)。使用DOM操作XML的代碼看起來(lái)比較直觀,并且,在某些方面比基于SAX的實(shí)現(xiàn)更加簡(jiǎn)單。但是,因?yàn)镈OM需要將XML文件的所有內(nèi)容讀取到內(nèi)存中,所以內(nèi)存的消耗比較大,特別對(duì)于運(yùn)行Andr

26、oid的移動(dòng)設(shè)備來(lái)說(shuō),因?yàn)樵O(shè)備的資源比較寶貴,所以建議還是采用SAX來(lái)解析XML文件,當(dāng)然,如果XML文件的內(nèi)容比較小采用DOM是可行的。 DOM解析就很常見(jiàn)了,我也就不多說(shuō)了,但是這個(gè)方法是不建議使用的,因?yàn)樗麜?huì)加載整個(gè)xml文件,會(huì)消耗更多的系統(tǒng)資源。 import java.io.InputStream;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import

27、 org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;/* * 使用Dom解析xml文件 * */public class DomXMLReader public static List readXML(InputStream inStream) List persons = new ArrayList(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

28、 try DocumentBuilder builder = factory.newDocumentBuilder(); Document dom = builder.parse(inStream); Element root = dom.getDocumentElement(); NodeList items = root.getElementsByTagName(person);/查找所有person節(jié)點(diǎn) for (int i = 0; i items.getLength(); i+) Person person = new Person(); /得到第一個(gè)person節(jié)點(diǎn) Element

29、 personNode = (Element) items.item(i); /獲取person節(jié)點(diǎn)的id屬性值 person.setId(new Integer(personNode.getAttribute(id); /獲取person節(jié)點(diǎn)下的所有子節(jié)點(diǎn)(標(biāo)簽之間的空白節(jié)點(diǎn)和name/age元素) NodeList childsNodes = personNode.getChildNodes(); for (int j = 0; j childsNodes.getLength(); j+) Node node = (Node) childsNodes.item(j); /判斷是否為元素類型

30、 if(node.getNodeType() = Node.ELEMENT_NODE) Element childNode = (Element) node; /判斷是否name元素 if (name.equals(childNode.getNodeName() /獲取name元素下Text節(jié)點(diǎn),然后從Text節(jié)點(diǎn)獲取數(shù)據(jù) person.setName(childNode.getFirstChild().getNodeValue(); else if (“age”.equals(childNode.getNodeName() person.setAge(new Short(childNode.

31、getFirstChild().getNodeValue(); persons.add(person); inStream.close(); catch (Exception e) e.printStackTrace(); return persons;pull: 除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android內(nèi)置的Pull解析器解析XML文件。 Pull解析器的運(yùn)行方式與 SAX 解析器相似。它提供了類似的事件,如:開(kāi)始元素和結(jié)束元素事件,使用parser.next()可以進(jìn)入下一個(gè)元素并觸發(fā)相應(yīng)事件。事件將作為數(shù)值代碼被發(fā)送,因此可以使用一個(gè)switch對(duì)感興趣的

32、事件進(jìn)行處理。當(dāng)元素開(kāi)始解析時(shí),調(diào)用parser.nextText()方法可以獲取下一個(gè)Text類型元素的值。既然android建議我們使用pull,我就詳細(xì)的說(shuō)一下這個(gè)方法吧。 創(chuàng)建android工程,配置可以單元測(cè)試的環(huán)境,然后考入我們上面的javabean和xml文件 創(chuàng)建service:package cn.partner4java.pull.service;import java.io.InputStream;import java.util.List;import cn.partner4java.pull.bean.Person;public class PullService p

33、ublic static List readXML(InputStream inStream) return null; 接下啦我們就書(shū)寫(xiě)readXML方法: /獲取xmlpull,我們可以使用android給我們提供的一個(gè)簡(jiǎn)單獲取類(便于快速獲得pull解析器) XmlPullParser parser = Xml.newPullParser(); /進(jìn)行編碼設(shè)置,把我們需要解析的內(nèi)容給他 parser.setInput(inStream, UTF-8); /獲取事件,就可以觸發(fā)第一解析到的字符對(duì)應(yīng)的事件 /他也是采用的流式觸發(fā) int enentType = parser.getEvent

34、Type(); /這個(gè)方法是把流事件往后退/ parser.next(); List persons = null; Person person = null; /XmlPullParser.END_DOCUMENT:Logical end of the xml document. Returned from getEventType, next() and nextToken() /when the end of the input document has been reached. /就是判斷這個(gè)事件不為文檔末尾事件,我們就循環(huán)下去 while(enentType != XmlPullP

35、arser.END_DOCUMENT) /對(duì)事件進(jìn)行判斷 switch (enentType) /是否為開(kāi)始事件,可以進(jìn)行數(shù)據(jù)初始化處理 case XmlPullParser.START_DOCUMENT: persons = new ArrayList(); break; /是否為開(kāi)始元素事件,如 /再往下,處理到person id.也會(huì)觸發(fā)這個(gè)事件 /也就是每解析一個(gè)字符就會(huì)觸發(fā)這個(gè)事件 case XmlPullParser.START_TAG: String tag = parser.getName(); /如果當(dāng)前為person標(biāo)簽,我們需要獲取id值 if(person.equals

36、(tag) person = new Person(); person.setId(new Integer(parser.getAttributeValue(0); else if(person != null) if(name.equals(tag) /parser.nextText(),當(dāng)前為name下一個(gè)節(jié)點(diǎn),為文本 person.setName(parser.nextText(); else if(age.equals(tag) person.setAge(new Short(parser.nextText(); break; /如果解析到person結(jié)束元素事件時(shí),我們就把當(dāng)前的pe

37、rson加到結(jié)合中 if (parser.getName().equalsIgnoreCase(person) & person != null) persons.add(person); person = null; enentType = parser.next(); return persons;然后我們對(duì)讀方法進(jìn)行單元測(cè)試 package cn.partner4java.pull.junit;import java.io.InputStream;import java.util.List;import cn.partner4java.pull.bean.Person;import cn

38、.partner4java.pull.service.PullService;import android.test.AndroidTestCase;public class PullServiceTest extends AndroidTestCase public void readXML() throws Exception InputStream inStream = this.getClass().getClassLoader().getResourceAsStream(person.xml); List persons = PullService.readXML(inStream); for(Person person:persons) System.out.println(person.getId() + : + person.getName(); 使用Pull解析器生成XML文件: 有些時(shí)候,我們需要生成一個(gè)XML文件,生成XML文件的方法有很多,如:可以只使用一個(gè)StringBuilder組拼XML內(nèi)容,然后把內(nèi)容寫(xiě)入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,這里推薦大家使用Pul

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論