XML介绍

[基于达内教育的学习,总结提炼]

一.概述:

1.XML 指可扩展标记语言 (Extensible Markup Language)

2.XML 的设计宗旨是传输数据,而非显示数据

3.XML 利用标签来保存数据

4.标签之间通过嵌套关系来表示数据之间的层级关系

二.XML的用途:

1.用来传输数据 (具有跨平台的特性,因此可以在不同的操作系统上交互)

2.因为XML能保存具有结构化的数据, 所有也常用作程序的配置文件

三.语法:

1. 文档声明: <?xml version=”1.0” encoding=”utf-8”?>

version指XML文档所遵循的版本号, encoding指用来通知解析器使用什么编码来解析当前XML文档. 但encoding指定的编码和XML文档保存时的编码必须一致.

2. 标签 ( 元素 )

标签体: 开始标签和结束标签之间的文本. 如<大学>xxxxx</大学>中的xxxxx就是标签体

自闭标签: 如果元素中不包含任何内容,则可以合并为自闭标签. 如<大学/>, 这就是一个自闭标签

根标签: 一个XML文档中有且只有一个根标签

命名规范: 1) 区分大小写, 如 <a>和<A>是两个不同的标签

                 2) 不能以数字和标点符号开头, 如 不能<1a>

                 3) 不能以XML,xml开头

                 4) 不能包含空格和冒号

3. 属性

一个标签中可以有多个属性,每个属性之间用空格隔开,属性必须用 ( ' ) 或 ( " ) 引起来

4. 注释

<!--  注释内容  -->

5. 转义字符

<              &lt;

>              &gt;

“               &quot;

‘                &apos;

&              &amp;

四.解析:

1. DOM解析:解析器把整个XML文档加载进内存,保存为一颗Document的对象树,通过Document对象,找到树上的节点对象, 每个对象都提供增删改查操作对应的方法.

优点: 1) 可以十分方便对节点进行增删改查操作

         2) 由于在内存中保存了文档结构树,解析一次即可重复使用数据

缺点: 1) 如果文档较大,会占用内存空间,甚至内存溢出

         2) 将整个文档解析完才能操作,相对消耗时间,效率较低

2.SAX解析:解析器逐行扫描XML文档, 利用处理器接口中的方法进行解析

优点: 1) 无需将整个XML文档加载到内存中,占用内存小

         2) 由于逐行解析, 遇到需要内容停下来处理, 效率高

缺点: 1) 每次需要数据,都需要重新解析

         2) 只能读取数据,不能做增删改操作

五.示例:

<?xml version="1.0" encoding="UTF-8"?>

<学校>
    <学院>
        <课程>离散数学</课程>
        <课程>数据分析与应用</课程>
    </学院>                                                                                                                                 
    <学院 名称="药学院">                                                                                                                    <教师>张三</教师>
    </学院>
</学校>

1. 查询第一个学院的第一门课程

// 1.创建解析器
// DOM解析为什么用SAX解析,应该是DOM解析实质上通过SAX解析读取的
SAXReader reader = new SAXReader();
// 2.利用解析器读取xml文档
Document dom = reader.read("school.xml");
// 3.获取根节点
Element root = dom.getRootElement();
// 4.获取第一个学院
Element college = root.element("学院");
// 5.获取学院节点
Element course = college.element("课程");
// 6.获取课程内容
String text = course.getText();

2.查询第二个学院的教师

// 1.创建解析器
SAXReader reader = new SAXReader();
// 2.利用解析器读取xml文档
Document dom = reader.read("school.xml");
// 3.获取根元素
Element root = dom.getRootElement();
// 4.获取第二个学院元素
List<Element> list = root.elements();
Element college = list.get(1);
// 5.获取第二个学院的教师名字
Element tech = college.element("教师");
// 6.获取教师名字
String text = tech.getText();

3. 向第一个学院添加一个教师节点(两种方式)

// 1.创建解析器
SAXReader reader = new SAXReader();
// 2.利用解析器读取xml文档
Document dom = reader.read("school.xml");
// 3.获取根元素
Element root = dom.getRootElement();
// 4.获取第一个学院元素
Element college = root.element("学院");                                                                                    // 5.添加教师节点                                                                                                                      // 方式一,创建一个游离的教师节点,挂载到父节点上 
Element tech = DocumentHelper.createElement("教师");
techName.setText("李四");
college.add(tech);                                                                                                                    // 方式二,直接在父节点上添加教师节点
Element tech = college.addElement("教师");
tech .setText("王五");                                                                                                               // 6.将内存中的document对象写到xml文档中
XMLWriter writer = new XMLWriter(new FileOutputStream(new File("school.xml")), OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();                                                                                                       

4. 向第二个学院在教师节点前插入一个学生节点

// 利用工具类获取document对象
Document dom = XMLUtils.getDom("school.xml");
// 获取根元素
Element root = dom.getRootElement();
// 获取第二个学院
List<Element> list = root.elements();
Element college = list.get(1);
// 创建一个游离的学生节点
Element stu = DocumentHelper.createElement("学生");
sty.setText("A学生");
// 获取第二个学院下的元素
List list2 = college.elements();
list2.add(1, stu);
// 将document文档更新到xml中
XMLUtils.write2Xml(dom, "school.xml");

5. 删除第二个学院的教师节点 (两种方式)

// 1.利用工具类获取Document对象
Document dom = XMLUtils.getDom("book.xml");
// 获取根元素
Element root = dom.getRootElement();
// 获取第二个学院
List<Element> list = root.elements();
Element college = list.get(1);
// 方式一:获取教师节点,从父元素中删除 Element tech= college.addElement("教师");
college.remove(tech);
// 方式二:从list中删除
List<Element> list2 = college.elements();
list2.remove(1);

// 将更新的document写到xml中
XMLUtils.write2Xml(dom, "school.xml");

6. 更新第一个学院的第一个课程节点的内容为统计学

// 1.利用工具类获取Document对象
Document dom = XMLUtils.getDom("school.xml");
// 2.获取根元素
Element root = dom.getRootElement();
// 3.获取第一个学院
Element college = root.element("学院");
// 4.获取课程节点
Element course= bookEle.element("课程");
// 5.更新内容
course.setText("统计学");

// 将更新的document写到xml中
XMLUtils.write2Xml(dom, "school.xml");

7. 给第一个学院添加一个属性, 名称="计算机与信息工程学院"

// 读取xml文档
Document dom = XMLUtils.getDom("school.xml");
// 获取第一个学院
Element college= dom.getRootElement().element("学院");
// 方式一:
Attribute attr = college.attribute("名称");
attr.setValue("计算机与信息工程学院");
// 方式二:
Attribute attr2 = college.attribute(0);
attr2.setValue("计算机与信息工程学院");
// 方式三:
String value = college.attributeValue("计算机与信息工程学院"); // 只能获取,不能增删改

// 将更新的document写到xml中
XMLUtils.write2Xml(dom, "school.xml");

8. 更新第二个学院的属性为"物理与电子学院"(3种方式)

// 读取xml文档
Document dom = XMLUtils.getDom("school.xml");
// 获取第二个学院
Element college = dom.getRootElement().element("学院");
// 方式一:
Attribute attr = college.attribute("学院");
attr.setValue("物理与电子学院");
// 方式二:
Attribute attr2 = college.attribute(0);
attr2.setValue("物理与电子学院");
// 方式三:
String value = college.attributeValue("学院"); // 只能获取,不能增删改

// 将更新的document写到xml中
XMLUtils.write2Xml(dom, "school.xml");

9. 删除第一个学院的属性(2种方式)// 读取xml文档

Document dom = XMLUtils.getDom("school.xml");
// 获取第一个学院
Element college = dom.getRootElement().element("学院");
//方式一:获取第一个学院的属性,从父元素中删除
Attribute attr = college.attribute("计算机与信息工程学院");
college.remove(attr);   
//方式二:
college.addAttribute("计算机与信息工程学院", null);
                
// 将更新的document写到xml中
XMLUtils.write2Xml(dom, "school.xml");

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值