XML文件解析之DOM解析
发布时间:2020-12-16 08:45:36 所属栏目:百科 来源:网络整理
导读:1.XML概念 XML:可扩展标志语言 Extensible Markup Language (1)是一种很像超文本标记语言(HTML)的标记语言 (2)它的设计宗旨是传输和存储数据,而不是显示数据(HTML是用来显示数据) (3)最大特点是:它的标签没有被预定义 2.DOM解析思路 DOM解析XML
1.XML概念
XML:可扩展标志语言 Extensible Markup Language
(1)是一种很像超文本标记语言(HTML)的标记语言
(2)它的设计宗旨是传输和存储数据,而不是显示数据(HTML是用来显示数据)
(3)最大特点是:它的标签没有被预定义
2.DOM解析思路
DOM解析XML时,会将XML文化中所有的内容以文档树的方式存在内存中,然后用户通过使用DOM API来遍历XML书、获得所需要的数据。
优点:整个文档读入内存,方便操作,直观,简单。
缺点:
整个文档读入内存,内存消耗比较大。
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一一对应。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |