创建公司 已有账号?

基本信息



联系信息

-
-

上传资料

选择营业执照图片文件


上传成功后渲染

公司环境照片(最少一张,长宽比例16:9)

2018

09/04

Java开发

阅读量

·

11790

Java数据持久化->XML文件(一)

展开剩余

Java数据持久化->XML文件(一)文章摘要

实验简介



XML即可扩展标记语言Extensible Markup Language,来源于HTML,但是与HTML又有所区别。其差别在于,HTML是一组由W3C组织预先定义好的标记,用于网页元素的展现。而XML的区别就在于“可扩展”上,所有的标记可以由用户自己定义,不限定标记的名称,主要用于储存数据。与数据库管理系统相比,更加轻量,格式更加简单通用,与文本文件相比,可读性,可维护性,性能等更强。


实验目的



1.掌握XML格式文件的格式与定义。

2.掌握如何利用标准的DOM对象来读取XML文件内容。

3.掌握如何利用Dom4JJDom第三方组件来读写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";

// 获取到该XMLDOM树模型,后续所有操作将基于此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文件(二)






为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。


20181009_153045_341.jpg