Java数据持久化->XML文件(一)文章摘要
XML即可扩展标记语言(Extensible Markup Language),来源于HTML,但是与HTML又有所区别。其差别在于,HTML是一组由W3C组织预先定义好的标记,用于网页元素的展现。而XML的区别就在于“可扩展”上,所有的标记可以由用户自己定义,不限定标记的名称,主要用于储存数据。与数据库管理系统相比,更加轻量,格式更加简单通用,与文本文件相比,可读性,可维护性,性能等更强。
1.掌握XML格式文件的格式与定义。
2.掌握如何利用标准的DOM对象来读取XML文件内容。
3.掌握如何利用Dom4J和JDom第三方组件来读写XML文件内容。
1.在项目根目录的data文件夹下面,添加一个XML文件,命名为Students.xml,用来描述跟Students.xls文件中一样的学员信息内容,格式如下:
<?xml version="1.0" encoding="UTF-8"?> <class id="WNCDC085"> <student sequence="1"> <id>WNCD201703015</id> <name>敬小越</name> <sex>男</sex> <age>24</age> <degree>本科</degree> <school>电子科技大学成都学院</school> </student>
<student sequence="2"> <id>WNCD201703020</id> <name>何小学</name> <sex>男</sex> <age>29</age> <degree>本科</degree> <school>成都理工大学</school> </student>
<student sequence="2"> <id>WNCD201703025</id> <name>杨小言</name> <sex>女</sex> <age>22</age> <degree>大专</degree> <school>四川华新现代职业学院</school> </student> </class> |
在Eclipse的XML编辑器中,我们还可以看到更加清晰的XML数据格式,类似于配置文件:
XML数据文件同样用来描述一个二维数据,上述XML文件所描述的数据与Students.xls所描述的数据是完全一致的。我们定义了最外层的根节点<class>,表示这是一个班级,<class id=”WNCDC085”>表示这个班级的编号(是class这个节点的属性)。同样,在class节点下面我们添加了三个<student>节点,表示三行数据,每行数据用于描述一个学生,同样也为每一个<student>节点设置了唯一编号id,在<student>这个节点下面的每一个节点就是在描述每一位学生的详情。
2.利用DOM读取XML
DOM是Document Object Model的缩写,即文档对象模型。XML将数据组织为一颗树,所以DOM就是对这颗树的一个对象描叙。通俗的说,就是通过解析XML文档,为XML文档 在逻辑上建立一个树模型,树的节点是一个个对象。我们通过存取这些对象就能够存取XML文档的内容。
public void readXmlByDom() throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); String xmlName= System.getProperty("user.dir") + "\\data\\Students.xml"; // 获取到该XML的DOM树模型,后续所有操作将基于此Document Document doc = builder.parse(xmlName); // 去掉XML文档中作为格式化内容的空白而映射在DOM树中 的不必要的Text Node对象 doc.normalize(); // 直接获取到class节点下的所有子节点列表 NodeList students = doc.getElementsByTagName("student"); // 通过item(0)获取到第一个student节点 Element s1 = (Element) students.item(0); // 输出该节点的属性sequence的值 System.out.println(s1.getAttribute("sequence"));
// 输出指定节点的值 Node id1 = s1.getElementsByTagName("id").item(0); System.out.println(id1.getFirstChild().getNodeValue());
System.out.println("==========================");
// 遍历输出所有student节点下的所有子节点和对应的值 for (int i = 0; i < students.getLength(); i++) // 循环处理对象 { Element son = (Element)students.item(i);; for (Node node=son.getFirstChild(); node!=null; node=node.getNextSibling()){ if (node.getNodeType() == Node.ELEMENT_NODE){ String name = node.getNodeName(); String value = node.getFirstChild().getNodeValue(); System.out.println(name+" : "+value); } } System.out.println("=========================="); } } |
3.利用DOM添加XML
public void createXmlByDom() { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setIgnoringElementContentWhitespace(false); String xmlName = System.getProperty("user.dir") + "\\data\\Students.xml"; try{ DocumentBuilder db = dbf.newDocumentBuilder(); Document doc=db.parse(xmlName); Element root = doc.getDocumentElement(); // 创建一个节点,并设置该节点的属性id=001 Element son =doc.createElement("son"); son.setAttribute("id", "001"); // 为son这个节点创建一个子节点,并命名为name Element name = doc.createElement("name"); name.setTextContent("儿子"); // 将该子节点name添加到父节点son中 son.appendChild(name); // 为son这个节点创建一个子节点,并命名为age Element age = doc.createElement("name"); age.setTextContent("10"); son.appendChild(age);
// 将子节点添加到文档中 root.appendChild(son); // 保存该XML的文件内容 TransformerFactory factory = TransformerFactory.newInstance(); Transformer former = factory.newTransformer(); former.transform(new DOMSource(doc), new StreamResult(new File(xmlName))); }catch(Exception e){ e.printStackTrace(); } } |
注:因为本节内容较长,所以特拆解为了两部分,下周将分享第二部分 “利用DOM修改XML"、“利用DOM删除XML”、“利用DOM4J操作XML文件”的知识,以及思考练习。
小伙伴们敬请期待哟~
下周推送:预备知识:Java数据持久化->XML文件(二)
版权所有,转载本站文章请注明出处:蜗牛学院在线课堂, http://www.woniuxy.com/note/185