[セットトップ]AndroidでのXML解析と生成——DOM解析xml
DOMがXMLファイルを解析すると、XMLファイルのすべてのコンテンツがオブジェクトツリーとしてメモリに格納され、DOM APIを使用してXMLツリーを巡り、必要なデータを取得できます.DOMを使用してXMLを操作するコードは直感的に見え、SAXベースの実装よりもいくつかの点で簡単である.ただし、DOMはXMLファイルのすべてのコンテンツを対象ツリーとしてメモリに格納する必要があるため、メモリの消費量が大きく、特にAndroidを実行するモバイルデバイスにとっては、デバイスのリソースが貴重であるため、SAXでXMLファイルを解析することをお勧めします.もちろん、XMLファイルの内容が小さい場合はDOMを採用することは可能です.
DOMPersonServiceクラスの作成
テストメソッド
その他のファイルの説明は前のブログを参照してください.
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());
}
その他のファイルの説明は前のブログを参照してください.