XML:可扩展标志语言 Extensible Markup Language
(3)最大特点是:它的标签没有被预定义
2.DOM解析思路
优点:整个文档读入内存,方便操作,直观,简单。
缺点:
整个文档读入内存,内存消耗比较大。
3.DOM解析步骤
(1).使用DocumentBuilderFactory创建
DocumentBuilderFactory实例。
(2).使用
DocumentBuilderFactory实例来创建DocumentBilder。
(3).加载解析XML文件(Document)。
(4).获取文档的根节点(Element)。
(5).获取根节点中所有子节点的列表(NodeList)。
(6).获取子节点列表中的需要读取的节点。
4.实例
private String domParseXml() { String str = null; List<Student> students = new ArrayList<Student>(); DocumentBuilderFactory factory = null; DocumentBuilder builder = null; Document document = null; InputStream is = null; // 1.创建DocumentBuilderFactory实例 factory = DocumentBuilderFactory.newInstance(); try { // 2.利用DocumentBuilderFactory实例创建DocumentBuilder实例 builder = factory.newDocumentBuilder(); try { // 3.加载xml文件到输入流 is = getResources().getAssets().open("dom_info.xml"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { // 4.解析xml文档并放在Document对象中 document = builder.parse(is); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 5.得到根元素 Element root = document.getDocumentElement(); // 6.获得student节点,并保存在列表中 NodeList nodes = root.getElementsByTagName("student"); Student student = null; for (int i = 0; i < nodes.getLength(); i++) { student = new Student(); Element studentElement = (Element) (nodes.item(i)); student.setId(studentElement.getAttribute("id")); Element studentNameElement = (Element) studentElement .getElementsByTagName("name").item(0); Element studentGenderElement = (Element) studentElement .getElementsByTagName("gender").item(0); Element studentAgeElement = (Element) studentElement .getElementsByTagName("age").item(0); student.setName(studentNameElement.getFirstChild() .getNodeValue()); student.setGender(studentGenderElement.getFirstChild() .getNodeValue()); student.setAge(studentAgeElement.getFirstChild().getNodeValue()); str = str + student.toString(); students.add(student); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } return str; }
<?xml version="1.0" encoding="utf-8"?> <students> <student id="0"> <name>zhangmq</name> <gender>female</gender> <age>24</age> </student> <student id="1"> <name>zhouhy</name> <gender>male</gender> <age>24</age> </student> </students>
5.概念
Node:节点,相对于tree这种数据结构而言。
Element:元素,是xml中的概念。<xxx>就是一个元素。
Attribute:属性,可有可无,name-value一一对应。