Document節(jié)點(diǎn)
???????? Document節(jié)點(diǎn)的兩個(gè)直接子節(jié)點(diǎn)的類(lèi)型分別是DocumentType類(lèi)型和Element類(lèi)型,其中的DocumentType節(jié)點(diǎn)對(duì)應(yīng)著XML文件所關(guān)聯(lián)的DTD文件,通過(guò)進(jìn)一步獲取該節(jié)點(diǎn)子孫節(jié)點(diǎn)來(lái)分析DTDL文件中的數(shù)據(jù);而其中的Element類(lèi)型節(jié)點(diǎn)對(duì)應(yīng)著XML文件的根節(jié)點(diǎn),通過(guò)進(jìn)一步獲取該Element類(lèi)型節(jié)點(diǎn)子孫節(jié)點(diǎn)來(lái)分析XML文件中的數(shù)據(jù)。
?????????
????????? Document 節(jié)點(diǎn)經(jīng)常使用下列方法獲取和該節(jié)點(diǎn)相關(guān)的信息。
????????? Element getDocumentElement()?
?????????? 返回當(dāng)前節(jié)點(diǎn)的Element子節(jié)點(diǎn)。
????????? DocumentType getDoctype()?
????????? 返回當(dāng)前節(jié)點(diǎn)的DocumentType子節(jié)點(diǎn)。
????????? NodeList getElementsByTagName(String name)?
????????? 返回一個(gè)NodeList對(duì)象,該對(duì)象由當(dāng)前節(jié)點(diǎn)的Element類(lèi)型子孫節(jié)點(diǎn)組成,這些子孫節(jié)點(diǎn)的名字由參數(shù)name指定。
????????? NodeList getElementsByTagNameNS(String namespaceURI,String localName)?
????????? 返回一個(gè)NodeList對(duì)象,該對(duì)象由當(dāng)前節(jié)點(diǎn)的Element類(lèi)型子孫節(jié)點(diǎn)組成, 這些子孫節(jié)點(diǎn)的名字由參數(shù)localName指定,名稱(chēng)空間由參數(shù)namespaceURI??? 指定。
????????? String getXmlEncoding()?
????????? 返回XML文件使用的編碼,即XML聲明中encoding屬性的值。
????????? boolean getXmlStandalone()
? ? ? ? ? 返回XML聲明中的standalone屬性的值。未指定時(shí)返回NULL
????????? standalone? 用來(lái)表示該文件是否呼叫其它外部的文件。??? 這里所指的外部文件其實(shí)就是查檢XML是不是有效的約束文件,或是DTD或是Schema
????????? String getXmlVersion()?
????????? 返回XML聲明中的version屬性的值
?????????? 其中g(shù)etXmlEncoding getXmlVersion getXmlStandalong在Android2.1中是沒(méi)有的。
要解析的XML文件:
靈渠在廣西壯族自治區(qū)興安縣境內(nèi),是世界上最古老的運(yùn)河之一,有著“世界古代水利建筑明珠”的美譽(yù)。靈渠古稱(chēng)秦鑿渠、零渠、陡河、興安運(yùn)河,于公元前214年鑿成通航,距今已2217年,仍然發(fā)揮著功用。http://img.21ic.com/21ic_pic/CSDN/20120228094142711.jpg膠萊運(yùn)河南起黃海靈山??冢钡植澈H綅u,流經(jīng)現(xiàn)膠南、膠州、平度、高密、昌邑和萊州等,全長(zhǎng)200公里,流域面積達(dá)5400平方公里,南北貫穿山東半島,溝通黃渤兩海。膠萊運(yùn)河自平度姚家村東的分水嶺南北分流。南流由麻灣口入膠州灣,為南膠萊河,長(zhǎng)30公里。北流由海倉(cāng)口入萊州灣,為北膠萊河,長(zhǎng)100余公里。http://img.21ic.com/21ic_pic/CSDN/20120228094142711.jpg位于淮河下游江蘇省北部,西起洪澤湖邊的高良澗,流經(jīng)洪澤,青浦、淮安,阜寧、射陽(yáng),濱海等六縣(區(qū)),東至扁擔(dān)港口入海的大型人工河道。全長(zhǎng)168km。http://img.21ic.com/21ic_pic/CSDN/20120228094142711.jpg
????private?Document??parseXML(InputStream?is) ????{???if(is?==?null)?return?null; ???? DocumentBuilderFactory?dbf?=?DocumentBuilderFactory.newInstance(); //???? dbf.setValidating(true);//設(shè)置檢查XML文件的有效性 //???? dbf.setIgnoringElementContentWhitespace(true);//設(shè)置忽略空白 //???? dbf.setNamespaceAware(false);//設(shè)置為true時(shí),由DocumentBuilderFactory產(chǎn)生的DOM解析器支持名稱(chēng)空間 ???? DocumentBuilder?db?=?null;?//DOM解析器 ???? Document?doc?=?null; ???? ???? try?{ ???? db?=?dbf.newDocumentBuilder(); }?catch?(ParserConfigurationException?e)?{ //?TODO?Auto-generated?catch?block e.printStackTrace(); } try?{ ?????doc?=?db.parse(is);//可以通過(guò)解析XML得到一個(gè)Document // ?????db.newDocument();//可以創(chuàng)建一個(gè)Document,然后修改它 ????? }?catch?(SAXException?e)?{ //?TODO?Auto-generated?catch?block e.printStackTrace(); }?catch?(IOException?e)?{ //?TODO?Auto-generated?catch?block e.printStackTrace(); } DocumentType?docType?=??doc.getDoctype(); String?xmlEncoding?=?doc.getXmlEncoding();//android2.1不支持 String?xmlVersion?=?doc.getXmlVersion(); ????????boolean?isAlone?=?doc.getXmlStandalone();//android2.1不支持 ???? ????NodeList?list?=?doc.getElementsByTagName("river"); ????int?length?=?list.getLength(); ????for(int?k?=?0;k<length;k++) ????{ ???? Node?node?=?list.item(k); ???? String?nodeName?=?node.getNodeName(); ???? String?textContent?=?node.getTextContent(); //取得當(dāng)前節(jié)點(diǎn)下的所有Text節(jié)點(diǎn)內(nèi)容,這里就包括introduction下和imageUrl下的Text以及空格 ???? ????} return?doc;
其中g(shù)etXmlEncoding方法在XML設(shè)置了encoding的情況下,取不到,不知道為什么。