加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml

发布时间:2020-12-16 00:12:59 所属栏目:百科 来源:网络整理
导读:1 XML是指可扩展标记语言 全称 extensible Markup Language,是一种标记语言,类似HTML, 它被设计的宗旨 是传输数据 在xml中的标签全是自己定义 的 xml是w3c组织发布的技术,目前thsg1.0 1.1 ,但是使用的都是1.0 2 XML的应用 2.1 常见的应用 第一种 用于系

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的层级层极结构会在内在中分配一处树形结构

document :代表整个文档

元素对象

属性对象

文本对象

节点对象,是上面的对象的父对象

dom解析的缺点是 如果文件过大,会造成内在溢出

dom解析的优点是 方便 实现 增加 修改 删除的操作

4.3 sax解析的原理

一行一行的边读边解析

当读到相应的标签的进修,自动执行里面相应的方法

4.4 sax解析的优点是 不会造成内存溢出

sax解析的缺点是 不能实现增加 修改 删除 的操作

5 pull解析的原理和代码实现

5.1 pull解析就 是sax的原理

sax解析需要反导文档都解析完成,不能停止

pull解析可以在某一部分停止 ,pull解析的原理也是一行一行的边读边解析

5.2 pull解析xml的代码的实现

首先创建一个xml格式的文件

<?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>

2)想要使用pull解析xml,首先导入jar包

(3)代码

public static void readFile() throws XmlPullParserException,IOException
	{
		//创建pull解析器工厂
		XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
		//创建pull解析器
		XmlPullParser parser = factory.newPullParser();
		//创建读入文件的输入流
		InputStream in = new FileInputStream("src/01.xml");
		//把要解析的文件放到解析器中
		parser.setInput(in,"utf-8");
		//创建储存文件的List集合
		List<Student> list=null;
		Student stu =null;
		int type=0;
		while((type=parser.getEventType())!=XmlPullParser.END_DOCUMENT)
		{
			//获取当前标签的名字
			String tname = parser.getName();
			switch(type)
			{
			case XmlPullParser.START_TAG:
				if("students".equals(tname))
				{
					list = new ArrayList<Student>();
				}
				else if("student".equals(tname))
				{
					 stu = new Student();
				}
				else if("name".equals(tname))
				{
					String sname = parser.nextText();
					stu.setName(sname);
				}
				else if("age".equals(tname))
				{
					String age = parser.nextText();
					stu.setAge(age);
				}
				break;
			case XmlPullParser.END_TAG:
				if("student".equals(tname))
				{
					list.add(stu);
				}
				break;
			}
			parser.next();
		}
		
		for(Student stus :list)
		{
			System.out.println(stus);
		}
	}

public static void readFile() throws XmlPullParserException,"utf-8");
		//创建储存文件的List集合
		List<Student> list=null;
		Student stu =null;
		int type=0;
		while((type=parser.getEventType())!=XmlPullParser.END_DOCUMENT)
		{
			//获取当前标签的名字
			String tname = parser.getName();
			switch(type)
			{
			case XmlPullParser.START_TAG:
				if("students".equals(tname))
				{
					list = new ArrayList<Student>();
				}
				else if("student".equals(tname))
				{
					 stu = new Student();
				}
				else if("name".equals(tname))
				{
					String sname = parser.nextText();
					stu.setName(sname);
				}
				else if("age".equals(tname))
				{
					String age = parser.nextText();
					stu.setAge(age);
				}
				break;
			case XmlPullParser.END_TAG:
				if("student".equals(tname))
				{
					list.add(stu);
				}
				break;
			}
			parser.next();
		}
		
		for(Student stus :list)
		{
			System.out.println(stus);
		}
	}

Student [name=zhangsan,age=20]
Student [name=zsan,age=23]
Student [name=lishi,age=23]
Student [name=wangwu,age=29]


再把读到的集合中的学生对象再写入另一个xml文件中去

private static void writeListFiles() throws Exception {
		// TODO Auto-generated method stub
		//创建pull解析器工厂
				XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
				//创建解析器
				XmlSerializer serializer = factory.newSerializer();
				//创建输出路径
				OutputStream out = new FileOutputStream("F:002.xml");
				serializer.setOutput(out,"utf-8");
				
				XmlPullParser  parser = factory.newPullParser();
				//创建文件 的输入流
				InputStream in = new FileInputStream("src/01.xml");
				//把要解析的文件 添加到解析器中去
				parser.setInput(in,"utf-8");
				//创建存储集合
				List<Student> list=null;
				Student 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<Student>();
						}else if("student".equals(tagName))
						{
							stu = new Student();
						}else if("name".equals(tagName))
						{
							String name =parser.nextText();
							stu.setName(name);
						}else if("age".equals(tagName))
						{
							String age = parser.nextText();
							stu.setAge(age);
						}
						break;
						
					case XmlPullParser.END_TAG:
						if("student".equals(tagName))
						{
							list.add(stu);
						}
						break;
					
					
					}
					parser.next();
					
				}
				
				Iterator<Student> it = list.iterator();
				//生成文档声明
				serializer.startDocument(null,true);
				//生成开始标签
				serializer.startTag(null,"students");
				while(it.hasNext()){
					Student stus= it.next();
					serializer.startTag(null,"student");
					//生成name agg
					serializer.startTag(null,"name");
					serializer.text(stus.getName());
					serializer.endTag(null,"name");
					serializer.startTag(null,"age");
					serializer.text(stus.getAge());
					serializer.endTag(null,"age");
					serializer.endTag(null,"student");
					
				}
				serializer.endTag(null,"students");
				serializer.endDocument();
				
	}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读