[セットトップ]AndroidでのXML解析と生成——DOM解析xml


DOMがXMLファイルを解析すると、XMLファイルのすべてのコンテンツがオブジェクトツリーとしてメモリに格納され、DOM APIを使用してXMLツリーを巡り、必要なデータを取得できます.DOMを使用してXMLを操作するコードは直感的に見え、SAXベースの実装よりもいくつかの点で簡単である.ただし、DOMはXMLファイルのすべてのコンテンツを対象ツリーとしてメモリに格納する必要があるため、メモリの消費量が大きく、特にAndroidを実行するモバイルデバイスにとっては、デバイスのリソースが貴重であるため、SAXでXMLファイルを解析することをお勧めします.もちろん、XMLファイルの内容が小さい場合はDOMを採用することは可能です.
 
DOMPersonServiceクラスの作成
public class DOMPersonService {
	
	public static List<Person> getPersonList(InputStream inStream) throws Exception{
		
		List<Person> personList = new ArrayList();
		
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder  builder  = factory.newDocumentBuilder();
		Document document = builder.parse(inStream);
		
		//  ,  xml            document    		
		
		//     (    )
		Element root = document.getDocumentElement();  
		
		NodeList nodes = root.getElementsByTagName("person");
		
		for(int i=0; i<nodes.getLength(); i++){
			Element personElement = (Element) nodes.item(i);
			
			Person person = new Person();
			// person  id   
			person.setId(Integer.valueOf(personElement.getAttribute("id")));
			
			NodeList childNodes = personElement.getChildNodes();
			
			//      ,      ,         
			for(int j=0; j<childNodes.getLength(); j++){
				Node childNode = childNodes.item(j);
				if(childNode.getNodeType() == Node.ELEMENT_NODE){
					if("name".equals(childNode.getNodeName() )){
						person.setName(childNode.getFirstChild().getNodeValue());
					}else if("age".equals(childNode.getNodeName())){
						Text textNode = (Text) childNode.getFirstChild();
						String ageStr = textNode.getNodeValue();
						person.setAge(Integer.valueOf(ageStr));
					}
				}
			}			
			personList.add(person);			
		}		
		return personList;
	}

テストメソッド
public void testDOM() throws Throwable {
		List<Person> personList = null;
		InputStream inStream = this.getClass().getClassLoader()
				.getResourceAsStream("person_list.xml");
		personList = DOMPersonService.getPersonList(inStream);

		Log.i("TAG", personList.toString());
	}

その他のファイルの説明は前のブログを参照してください.