xml综合简述

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包

点击下载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来操作

  点击打开链接















早起的年轻人 CSDN认证博客专家 移动开发 项目管理 Java
只要用心去做,每一件事情还是有可能成功的,当然成功是没有界限的,只不过是达到自己心里的那个目标,公众号:我的大前端生涯,一个爱喝茶的程序员,通常会搞搞SpringBoot 、Herbinate、Mybatiys、Android、iOS、Flutter、Vue、小程序等.
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页