Document節(jié)點(diǎn)
???????? Document節(jié)點(diǎn)的兩個直接子節(jié)點(diǎn)的類型分別是DocumentType類型和Element類型,其中的DocumentType節(jié)點(diǎn)對應(yīng)著XML文件所關(guān)聯(lián)的DTD文件,通過進(jìn)一步獲取該節(jié)點(diǎn)子孫節(jié)點(diǎn)來分析DTDL文件中的數(shù)據(jù);而其中的Element類型節(jié)點(diǎn)對應(yīng)著XML文件的根節(jié)點(diǎn),通過進(jìn)一步獲取該Element類型節(jié)點(diǎn)子孫節(jié)點(diǎn)來分析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)?
????????? 返回一個NodeList對象,該對象由當(dāng)前節(jié)點(diǎn)的Element類型子孫節(jié)點(diǎn)組成,這些子孫節(jié)點(diǎn)的名字由參數(shù)name指定。
????????? NodeList getElementsByTagNameNS(String namespaceURI,String localName)?
????????? 返回一個NodeList對象,該對象由當(dāng)前節(jié)點(diǎn)的Element類型子孫節(jié)點(diǎn)組成, 這些子孫節(jié)點(diǎn)的名字由參數(shù)localName指定,名稱空間由參數(shù)namespaceURI??? 指定。
????????? String getXmlEncoding()?
????????? 返回XML文件使用的編碼,即XML聲明中encoding屬性的值。
????????? boolean getXmlStandalone()
? ? ? ? ? 返回XML聲明中的standalone屬性的值。未指定時返回NULL
????????? standalone? 用來表示該文件是否呼叫其它外部的文件。??? 這里所指的外部文件其實(shí)就是查檢XML是不是有效的約束文件,或是DTD或是Schema
????????? String getXmlVersion()?
????????? 返回XML聲明中的version屬性的值
?????????? 其中g(shù)etXmlEncoding getXmlVersion getXmlStandalong在Android2.1中是沒有的。
要解析的XML文件:
靈渠在廣西壯族自治區(qū)興安縣境內(nèi),是世界上最古老的運(yùn)河之一,有著“世界古代水利建筑明珠”的美譽(yù)。靈渠古稱秦鑿渠、零渠、陡河、興安運(yùn)河,于公元前214年鑿成通航,距今已2217年,仍然發(fā)揮著功用。http://img.21ic.com/21ic_pic/CSDN/20120228094142711.jpg膠萊運(yùn)河南起黃海靈山???,北抵渤海三山島,流經(jīng)現(xiàn)膠南、膠州、平度、高密、昌邑和萊州等,全長200公里,流域面積達(dá)5400平方公里,南北貫穿山東半島,溝通黃渤兩海。膠萊運(yùn)河自平度姚家村東的分水嶺南北分流。南流由麻灣口入膠州灣,為南膠萊河,長30公里。北流由海倉口入萊州灣,為北膠萊河,長100余公里。http://img.21ic.com/21ic_pic/CSDN/20120228094142711.jpg位于淮河下游江蘇省北部,西起洪澤湖邊的高良澗,流經(jīng)洪澤,青浦、淮安,阜寧、射陽,濱海等六縣(區(qū)),東至扁擔(dān)港口入海的大型人工河道。全長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時,由DocumentBuilderFactory產(chǎn)生的DOM解析器支持名稱空間 ???? 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);//可以通過解析XML得到一個Document // ?????db.newDocument();//可以創(chuàng)建一個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的情況下,取不到,不知道為什么。