1 XML是指可扩展标记语言 全称 extensible Markup Language ,是一种标记语言,类似HTML,
它被设计的宗旨 是传输数据
在xml中的标签全是自己定义 的
xml是w3c组织发布的技术,目前thsg1.0 1.1 ,但是使用的都是1.0
2 XML的应用
2.1 常见的应用
第一种 用于系统之间传输数据的格式
例如:QQ ,这种传输方式具有可读必和可维护性
第二种 用于表示生活中有关系的数据
第三种 经常用在配置文件中
可以提高系统的灵活性
3.XML的语法
3.1文档声明
如果想要创建一个xml,首先必须在文件里面写文档声明
<?xml version="1." encoding ="utf-8"?>
version :xml的版本
encoding:xml的编码方式
standalone: xml文件是否依赖其他文件
文档声明必须要写在xml文件的第一行第一列
3.2元素(标签)
(1)xml的标签有开始,必须有结束
(2)有些标签没有结束标签,可以在标签内结束
(3)xml中的标签可以嵌套,但是必须是合理的嵌套
(4)xml中只能有一个根标签,其他的标签都是这个标签的子标签
(5)xml 中的代码是区分大小写的
(6)xml 会把文件里面的空格和换行都当做内容来处理
3.3 属性
(1)在thml中的标签里面有属性,在xml中也是存在属性的
(2)在xml的标签中可以有多个属性,但是每个属性都有自己的名称,每个属性的名称不可相同
(3)在xml的标签里面属性的写法
3.4 注释
(1)在xml中添加注释 <!-- -->
(2)在xml中注释是不可以嵌套的
3.5 CDATA区
(1)把cdata区里面的内容当做普通文件显示,而不是当做标签使用
<![CDATA[内容]]>
4 XML的解析
4.1XML的解析种类
XML的解析有三种 dom解析 sax解析 pull解析
4.2 dom解析 和sax 的解析的原理
(1)dom解析原理
根据xml的层级层极结构会在内在中分配一处树形结构
分析图4-2-1
document :代表整个文档
节点对象,是上面的对象的父对象
dom解析的缺点是 如果文件过大,会造成内在溢出
dom解析的优点是 方便 实现 增加 修改 删除的操作
(2) sax解析的原理
一行一行的边读边解析
当读到相应的标签的进修,自动执行里面相应的方法
分析图4-2-2
sax解析的优点是 不会造成内存溢出
sax解析的缺点是 不能实现增加 修改 删除 的操作
4.3 pull解析的原理和代码实现
(1) pull解析的原理
sax解析需要反导文档都解析完成,不能停止
pull解析可以在某一部分停止 ,pull解析的原理也是一行一行的边读边解析
(2) pull解析xml的代码的实现
把本地的xml进行解析,把xml文件中的内容放到集合中去
首先创建一个xml格式的文件,在里面写两个student标签
<?xml version="1.0" encodint="utf-8"?>
<students>
<student>
<name>zhangsan</name>
<age>20</age>
</student>
<student>
<name>lisi</name>
<age>22</age>
</student>
<student>
<name>wangwu</name>
<age>26</age>
</student>
</students>
创建一个student类来保存学生的个体信息属性
public class StudentInfo {
public String name;
public <span style="font-family:SimSun;">String</span> age;
}
导入Pull解析的jar包
<pre name="code" class="java">public static void main(String[] args) throws XmlPullParserException, IOException {
// 1 创建解析器工厂
XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
// 创建解析器
XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser();
// 把要解析的文件放到解析器中
FileInputStream fileInputStream = new FileInputStream("src/student.xml");
xmlPullParser.setInput(fileInputStream, "utf-8");
// 声明保存解析数据的集合
ArrayList<StudentInfo> arrayList = null;
StudentInfo studentInfo = null;
// 解析操作
int type = 0;
while ((type = xmlPullParser.getEventType()) != XmlPullParser.END_DOCUMENT) {
// 获取当前读取到的标签的名称
String tagName = xmlPullParser.getName();
switch (type) {
case XmlPullParser.START_DOCUMENT:
if ("students".equals(tagName)) {
arrayList = new ArrayList<StudentInfo>();
} else if ("student".equals(tagName)) {
studentInfo = new StudentInfo();
} else if ("name".equals(tagName)) {
// 获取对应标签的值
studentInfo.name = xmlPullParser.nextText();
} else if ("age".equals(tagName)) {
studentInfo.age = xmlPullParser.nextText();
}
break;
case XmlPullParser.END_DOCUMENT:
if ("student".equals(tagName)) {
// 将解析出来的数据放到集合中去
arrayList.add(studentInfo);
}
break;
default:
break;
}
// 继续向下执行
xmlPullParser.next();
}
}
将集合中的信息写入到一个xml文件中去
private static void writeListFiles() throws Exception {
<pre name="code" class="java">//创建pull解析器工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//创建解析器
XmlSerializer serializer = factory.newSerializer();
//创建输出路径
OutputStream out = new FileOutputStream("F:\\0002.xml");
serializer.setOutput(out,"utf-8");
XmlPullParser parser = factory.newPullParser();
//创建文件 的输入流
InputStream in = new FileInputStream("src/01.xml");
//把要解析的文件 添加到解析器中去
parser.setInput(in,"utf-8");
//创建存储集合
List<StudentInfo> list=null;
StudentInfo stu = null;
int type = 0;
while((type=parser.getEventType())!=XmlPullParser.END_DOCUMENT)
{
//得到当前读取的标签名
String tagName = parser.getName();
//依据每次读取的标签类型来判断
switch(type)
{
case XmlPullParser.START_TAG:
if("students".equals(tagName))
{
list = new ArrayList<StudentInfo>();
}else if("student".equals(tagName))
{
stu = new StudentInfo();
}else if("name".equals(tagName))
{
String name =parser.nextText();
stu.name = name;
}else if("age".equals(tagName))
{
String age = parser.nextText();
stu.age = age;
}
break;
case XmlPullParser.END_TAG:
if("student".equals(tagName))
{
list.add(stu);
}
break;
}
parser.next();
}
Iterator<StudentInfo> it = list.iterator();
//生成文档声明
serializer.startDocument(null, true);
//生成开始标签
serializer.startTag(null, "students");
while(it.hasNext()){
StudentInfo stus= it.next();
serializer.startTag(null, "student");
//生成name agg
serializer.startTag(null, "name");
serializer.text(stus.name);
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(stus.age);
serializer.endTag(null, "age");
serializer.endTag(null, "student");
}
serializer.endTag(null, "students");
serializer.endDocument();
}
mysql数据库安装与卸载
mysql数据库的基本操作(二)
mysql数据库基本操作(三)使用JDBC来操作