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 的标准 ...
随机推荐
- CPU、OpenGL/DirectorX、显卡驱动和GPU之间的关系
- 第 8 章 容器网络 - 052 - overlay 如何实现跨主机通信?
overlay 如何实现跨主机通信? 在 host2 中运行容器 bbox2: docker run -itd --name bbox2 --network ov_net1 busybox bbox2 ...
- python logging日志输出个文件中
# -*- coding:utf-8 -*- import logging # 引入logging模块 import os.path import time # 第一步,创建一个logger logg ...
- 书法字帖 PDF转化为可打印PDF
书法类的PDF,因为底色是黑色的,打印起来特别费墨,所以需要转化成白底黑字的文件, 才好打印. 1)用 pdfbox 的 ExtractImages 命令,抽出所有的图片 https://pdfbox ...
- Setting the Java Class Path
The class path is the path taht Java Runtime Environment(JRE) searches for classes and other resourc ...
- TCHART FROM DATATABLE
using System;using System.Collections;using System.ComponentModel;using System.Drawing;using System. ...
- Mycat入门核心概念
Mycat中的核心概念 Mycat中的核心概念 1.数据库中间件 Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...
- android -------- ConstraintLayout Guideline和Barrier(四)
前面的文章 ConstraintLayout 介绍 (一) ConstraintLayout约束属性 (二) ConstraintLayout 宽高比和偏移量比(三) 此博文主要讲解:Guidelin ...
- python模块--time & datetime
time模块 #获取当前时间的时间戳 import time >>> time.time() 1535004894.0959966 #日期字符串转化成时间戳 >>> ...
- 4.2 面向对象分析(二) CRC方法标识概念类
CRC 又称为CRC索引卡片:CRC card 每张卡片代表一个类 Each card represents one class 每张卡片上写出这个类承担的职责.与其合作交互的其他类名 ...