2、DOM解析
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 解析
parseDOM();
}
private void parseDOM() {
List
try {
// 1.获取要解析的xml文档的流文件
InputStream dom = getAssets().open("data.xml");
// 2.获取到一个解析工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
// 3.通过解析工厂获取到一个解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
// 4.把需要解析的流文件放到解析器中
Document parse = builder.parse(dom);
// 5.获取到根节点
Element element = parse.getDocumentElement();
// 6.获取到所有的子节点
NodeList childNodes = element.getChildNodes();
// 7.遍历所有的子节点
for (int i = 0; i < childNodes.getLength(); i++) {
// 8.获取到每个子节点
Node child_node = childNodes.item(i);
// 9.创建对象
Person person = new Person();
// 10.判断获取到的每个子节点类型是否是元素节点类型
if (child_node.getNodeType() == Node.ELEMENT_NODE) {
// 11.如果是这个类型,就强转成一个元素
Element child_el = (Element) child_node;
// 12.获取到里面的属性
String idString = child_el.getAttribute("id");
person.setId(Integer.parseInt(idString));
// 13.再获取到下面的每个子节点
NodeList childNodes2 = child_el.getChildNodes();
// 14.继续遍历这些子节点
for (int j = 0; j < childNodes2.getLength(); j++) {
// 15.获取到每个子节点
Node item = childNodes2.item(j);
// 16.拿到每个子节点,进行判断
if (item.getNodeType() == Node.ELEMENT_NODE) {
// 17.强转
Element el = (Element) item;
if (el.getNodeName().equals("name")) {// 获取到的是一个name属性
// 把节点里面的值通过set方法给person对象
person.setName(el.getFirstChild()
.getNodeValue());
} else if (el.getNodeName().equals("age")) {// 获取到的是一个age属性
person.setAge(el.getFirstChild().getNodeValue());
}
}
}
// 添加到集合
list.add(person);
}
}
Log.i("aaa", list.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}