XML(二)
XML
XML介绍
1、什么是xml?
概念:XML(EXtensible Markup Language)XML 指可扩展标记语言(EXtensible Markup Language)
可扩展:我们可以自定义,完全按照自己的规则来!
标记: 计算机所能认识的信息符号!
01.很像html
02.着重点是数据的保存
03.无需预编译
04.符合W3C标准
2、XML 命名规则
l 名称可以含字母、数字以及其他的字符
l 名称不能以数字或者标点符号开始
l 名称不能以字符 “xml”(或者 XML、Xml)开始
l 名称不能包含空格
3、XML的组成部分:
01.文档声明 <?xml version="1.0" encoding="UTF-8"?>
02.元素 <p></p>
03.属性 <p id="haha"></p>
04.注释 <!-- --> // /***/
05.特殊字符
06.CDATA区域 Character data 字符数据
CDATA区域: XML解析器不会处理,而是当成字符串原样输出!
<![CDATA[xml内容]]>
07.处理指令 引入css样式
4、XML 与 HTML 的主要差异
l XML 不是 HTML 的替代。
l XML 和 HTML 为不同的目的而设计:
l XML 被设计为传输和存储数据,其焦点是数据的内容。
l HTML 被设计用来显示数据,其焦点是数据的外观。
l HTML 旨在显示信息,而 XML 旨在传输信息。
5、XML注意点:
l xml文件中只能有一个根节点
l 节点要成对出现 有开发和闭合
l 节点必须正确的嵌套
l 严格区分大小写
l 空格和换行都是特殊字符 会被解析器解析
6、特殊字符:
> >
< <
& &
' '
" "

7、XML解析的四种方式
01.DOM:基于xml文档树结构的解析,把xml文件中的内容都读取到内存中,
比较占内存,消耗资源多!
02.SAX:基于事件的解析。消耗资源小!
03.JDOM:针对于java的特定模型!满足2 8原则!自身没有解析器,依赖于SAX2!
04.DOM4J:for(4)JDOM的一个分支!源码开放,性能优异,功能强大!
8、XMLDOM树
xml,html都是一个类似于倒挂的树!
只有一个根节点,枝叶茂盛!
我们把这个倒挂的树称之为===》dom树!
DOM:(Doucument Object Model)文档对象模型!
图示:

创建第一个maven项目:
步骤如下:
1.new project===>maven==>quick==>archetypeCatalog=internal
2.引入需要的pom节点
3.自定义一个xml文件
4.需求通过dom4j实现查询学校下面的年级以及班级信息
5.创建一个测试类 书写代码
DTD(Document Type Definition(文档定义类型))
l 01.规范我们的编码
l 02.在浏览器中正常的显示
实例:
<!ELEMENT school (grade+),(class|student)>
ELEMENT :元素,关键字
school:元素名称
grade:子元素或者元素类型 CDATA PCDATA (Parse)解析数据,不能包含子元素
字符的含义:
():用来给元素分组
| :两者必须选择一个
+ : 1-N,至少出现一次
* : 0-N,可有可无,并且可以多次
?: 0|1,最多一次
,:元素出现的顺序
DTD文档使用方式:
01.内部DTD
<!DOCTYPE 根元素[定义的内容]>
02.外部DTD
<!DOCTYPE 根元素 SYSTEM "dtd文件位置">
02.内外部DTD
<!DOCTYPE 根元素 SYSTEM "dtd文件位置"[定义的内容]>
XML课堂练习:(增 删 改 查)
步骤:
l 首先创建的是xml文件。(我的例子)

<?xml version="1.0" encoding="UTF-8"?>
<clothes>
<type name=" 衣服1">
<clothes name="连衣裙" color="白色"/>
<clothes name="T恤" color="蓝色"/>
</type>
<type name=" 衣服2">
<clothes name="牛仔裤" color="黑色"/>
<clothes name="夹克" color="粉色"/>
</type>
<type name=" 衣服3">
<clothes name="外套" color="蓝色"/>
<clothes name="短裤" color="灰色"/>
</type>
<type name="衣服4">
<clothes name="衬衫" color="白色"/>
<clothes name="紧身裤" color="黑色"/>
</type>
</clothes>
l 然后在测试类里边写相关的代码,来实现增删改查一系列操作
l 可以使用dom4j的相关架包信息 所以要在pom.xml文件里写上使用的dom4j信息,以便导dom4j的架包
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
l 初始的XML文件样式

查
要获取dom和根节点所以需要创建一个方法 ,以在查全部的时候调用 查询
//获取dom 和根节点
public static void getDocument()
{
SAXReader reader =new SAXReader();//创建解析器
try {
document =reader.read("src/resources/clothes.xml");//读取xml文件
root=document.getRootElement();
} catch (DocumentException e) {
e.printStackTrace();
}
}
获取dom和根节点 查看全部
//1.查看全部
private static void findAll() {
getDocument();
//根据根节点获取子节点
Iterator <Element> types= root.elementIterator();
while(types.hasNext()){
Element type =types.next();
System.out.println("衣服的名称"+type.attributeValue("name"));
//通过type获取clothes
Iterator<Element> clothes =type.elementIterator();
//遍历clothes
while(clothes.hasNext()){
Element cloth =clothes.next();
System.out.println("衣服的款式为"+cloth.attributeValue("name"));
System.out.println("衣服的颜色为"+cloth.attributeValue("color"));
}
}
}
查看全部
运行结果:

注意:
在写删 改 修的操作时 要考虑的是 ,我们不单单是对内存中修改,我们要的是需要在xml文件里修改 所以在完成这一系列的操作时我创建一个真正保存的方法
//真实的保存数据(字符流)
public static void save(){
//创建输出流
XMLWriter writer=null;
//编码格式
OutputFormat format=null;
try {
format=OutputFormat.createPrettyPrint();//设置格式
writer =new XMLWriter(new FileWriter("src/resources/clothes.xml"),format);
writer.write(document);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
真正的在xml进行
增
//3.新增
private static void add() {
Element type =root.addElement("type");
type.addAttribute("name","衣服4");
Element cloth = type.addElement("clothes");
cloth.addAttribute("name","衬衫");
cloth.addAttribute("color","白色");
Element cloth1 = type.addElement("clothes");
cloth1.addAttribute("name","紧身裤");
cloth1.addAttribute("color","黑色");
save();
System.out.println("新增成功");
}
增加
运行结果:

删
//2.删除
private static void delete() {
Iterator<Element> types =root.elementIterator();//拿到根节点下的所有的字节点
while(types.hasNext()){
Element type =types.next();
if (type.attributeValue("name").equals("衣服5")){
root.remove(type);
}
}
save();
System.out.println("删除成功");
}
删除
运行结果:

改
//4.修改
private static void update() {
Iterator<Element> types =root.elementIterator();//拿到所有的子节点
System.out.println("请输入需要修改的衣服名称");
String Receive =input.next();
System.out.println("请输入修改后的衣服名称");
String Receive2 =input.next();
while(types.hasNext()){
Element type =types.next();
if(type.attributeValue("name").equals(Receive)){
type.setAttributeValue("name",Receive2);
}
}
save();
System.out.println("修改成功");
}
}
修改
运行结果:
XML(二)的更多相关文章
- Java SE之XML<二>XML DOM与SAX解析
[文档整理系列] Java SE之XML<二>XML DOM与SAX解析 XML编程:CRUD(Create Read Update Delete) XML解析的两种常见方式: DOM(D ...
- JavaScript操作XML(二)
上一篇介绍了XML的结构以及节点之间的关系这一篇介绍浏览器内建的XML解析器以及JavaScript是如何加载XML的. 大多数浏览器都有读取和操作 XML 的内建 XML 解析器. 解析器(XML ...
- Hibernate映射文件详解(News***.hbm.xml)二
转自 http://blog.csdn.net/a9529lty/article/details/6454924 一.hibernate映射文件的作用: Hibernate映射文件是Hibernate ...
- 用javascript操作xml(二)JavaScript 将XML转换成字符串(xml to string)
function xmlToString(xmlData) { var xmlString; //IE if (window.ActiveXObject){ xmlString = xmlData.x ...
- Xml二(解析思想)、
XML解析: * 解析xml可以做: * 如果xml作为配置文件:读取 * 如果xml作为传输文件:写,读 * xml解析思想: * DOM:将文档加载进内存,形成一颗dom树(document对象) ...
- XML二
XML的语法要求: 1,XML文档必须有一个顶层元素,即文档元素,所有其他元素必须嵌入在文档元素中. 2,元素嵌套要正确,即如果一个元素在另一个元素中开始,那么必须在同一个元素中结束. 3,每个元素必 ...
- Android之使用XMLPull解析xml(二)
转自:http://www.blogjava.net/sxyx2008/archive/2010/08/04/327885.html 介绍下在Android中极力推荐的xmlpull方式解析xml.x ...
- XML介绍
XML [TOC] 1.XML简介 XML是Extend Markup Langue可扩展标签语言,标签由开发着自己定义 作用是: 1.描述带关系的数据(作为软件的配置文件):包含与被包含的关系 2. ...
- XML增、删、改
今天有个需求需要操作xml节点.突然见遗忘了许多.上网看了些资料.才整出来.脑袋真不够用.在这里把我找到的资料共享一下.方便以后使用.本文属于网摘/ 一.简单介绍 using System.Xml; ...
- JavaScript操作XML
JavaScript操作XML (一) JavaScript操作XML是通过XML DOM来完成的.那么什么是XML DOM呢?XML DOM 是: 用于 XML 的标准对象模型 用于 XML 的标准 ...
随机推荐
- legend2---开发日志3(thinkphp的入口目录是public的体现是什么)
legend2---开发日志3(thinkphp的入口目录是public的体现是什么) 一.总结 一句话总结:需要深刻理解程序的入口和入口位置都在public目录这里,比如读写文件的初始目录都在这,获 ...
- 雷林鹏分享:C# 运算符
C# 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C# 有丰富的内置运算符,分类如下: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本教程将逐一讲解算术运算 ...
- 如何理解机器学习/统计学中的各种范数norm | L1 | L2 | 使用哪种regularization方法?
参考: L1 Norm Regularization and Sparsity Explained for Dummies 专为小白解释的文章,文笔十分之幽默 why does a small L1 ...
- Linux中符号总结
常用符号~ 登陆用户当前的家目录 . 当前目录.. 当前目录的上一级目录cd - 返回上一次的目录; 命令分隔符# 表示注释 ? 通配符中表示任意一个字符* 通配符中表 ...
- Python自学:第二章 合并(拼接字符串)
first_name = "ada" last_name = "lovelace" full_name = first_name + " " ...
- Could not allocate 40960 bytes percpu data
2017-10-01 21:40:56[ 176.700091] vif: Could not allocate 40960 bytes percpu data[ 263.762812] perc ...
- 在项目中使用react
1. 运行 ’cnpm i react react-dom -S' 安装包 react:专门用于创建组件和虚拟DOM,同时组件的生命周期都在这个包中 react-dom:专门进行DOM操作,主要应用场 ...
- Appium移动自动化测试(一)----Appium的安装
前言: 我的环境为win10 64,安装过程请根据自己的电脑环境而定. 一.Appium安装 1.Appium官方网站:http://appium.io/下载windows版本的Appium; Eas ...
- LVM(逻辑卷管理)从0到实战
一.请看图 二.LVM——Logical Volume Manager LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小, ...
- Oracle PL/SQL语言函数、匿名语句及循环
一.自定义函数 格式: create or replace function 函数名(参数名 参数类型...) return 返回值类型 as xx vachar2(20) ...
