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