浅谈XML
发布时间:2020-12-16 08:53:07 所属栏目:百科 来源:网络整理
导读:1.XML a.xml的简介 i.什么是xml:eXtensible Markup Language,可扩展标记型语言 (1)标记型语言:html是标记型语言,都是使用标签进行操作。 xml里面的操作也是使用标签进行操作。 (2)可扩展:html里面的标签,每个标签有自己特定的含义,比如br/ hr/,
1.XMLa.xml的简介i.什么是xml:eXtensible Markup Language,可扩展标记型语言(1)标记型语言:html是标记型语言,都是使用标签进行操作。 xml里面的操作也是使用标签进行操作。 (2)可扩展:html里面的标签,每个标签有自己特定的含义,比如<br/> <hr/>, 在xml中标签自己定义的,比如 <aa> <猫> (3)xml的主要的功能是存储数据(不是显示数据) (4)xml的版本 1.0 1.1 ,一般使用的是 1.0版本 ii. xml的应用 (1)xml的应用在三个地方 第一,xml用于作为系统之间传输数据的格式 第二,xml用于表示生活中有关系的数据 第三,xml经常使用在系统的配置文件 b.xml的文档声明(1)如果创建xml文件,在xml中必须要有一个文档声明(2)写法: <?xml version="1.0" encoding="utf-8"?> version : 必须要有,xml的版本 ,一般使用1.0 encoding:可选的,xml的编码方式 standalone:可选的,xml是否依赖其他文件 yes no (3)注意:文档声明需要放在xml文件的第一行第一列 2.xml的解析简介(a)xml解析的分类(1)解析xml有三种方式第一种方式:dom解析 第二种方式:sax解析 第三种方式:pull解析 (b)dom解析xml(1)根据xml的层级结构在内存中分配一个树形结构,document :代表整个文档 element:代表元素对象(标签) 属性对象 文本对象 node节点对象,是上面对象的父对象 (2)dom解析xml的优点: 因为分配了一个树形结构,很方便的实现增加 修改 删除的操作 (3)dom解析xml的缺点: 如果要解析的文件过大,一次性在内存中分配一个树形结构,造成内存的溢出 (c)sax解析xml(1)sax解析的方式:边读边解析当使用sax方式读到特定的标签时候,自动调用相应的方法进行操作 (2)sax解析xml的优点: 不会造成内存的溢出 (3)sax解析xml的缺点: 不能实现增加 修改 删除的操作 (d)pull解析xml首先,导入pull的jar包(两个jar包)(1)使用pull解析xml文件把xml中的内容放到集合里面 步骤: * 1、创建解析器工厂 * 2、根据解析器工厂创建解析器 * 3、把要操作的文件放到解析器里面
package cn.itcast.pull; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; public class TestPull01 { /** * 1、创建解析器工厂 * 2、根据解析器工厂创建解析器 * 3、把要操作的文件放到解析器里面 */ public static void main(String[] args) throws Exception { //创建解析器工厂 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); //根据工厂创建解析器 XmlPullParser parser = factory.newPullParser(); //得到要操作文件的输入流 InputStream in = new FileInputStream("src/stu.xml"); //把要操作的文件放到解析器里面 parser.setInput(in,"utf-8"); //开始解析 int type = 0; List<Student> list = null; Student student = null; //如果当前解析到的标签,不是文档的结束,继续操作 while((type=parser.getEventType())!=XmlPullParser.END_DOCUMENT) { //得到当前解析的标签的名称 String tagName = parser.getName(); /* * 1、如果解析到students ,创建list集合 * 2、如果解析到student,创建student对象 * 3、如果解析到name和age,获取标签里面内容 * 4、把内容放到student对象里面 * */ switch(type) { case XmlPullParser.START_TAG: if("students".equals(tagName)) { //创建list集合 list = new ArrayList<Student>(); } else if("student".equals(tagName)) { student = new Student(); } else if("name".equals(tagName)) { //得到标签里面的值 String name = parser.nextText(); //把name值放到对象里面 student.setName(name); } else if("age".equals(tagName)) { String age = parser.nextText(); student.setAge(age); } break; case XmlPullParser.END_TAG: //当解析到结束的student时候,把对象放到list里面 if("/students".equals(tagName)) { list.add(student); } break; } //向下执行 parser.next(); } //遍历list集合 for (Student stu : list) { System.out.println(stu.toString()); } } } (2)把集合(对象)里面的数据写到xml文件中(序列化)
package cn.itcast.pull; import java.io.FileOutputStream; import java.io.OutputStream; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; public class TestPull { /** * 把对象里面的数据写到本地的xml文件中 * * 1、创建解析器工厂 * 2、根据工厂创建解析器 * 3、设置文件的地址 * @throws XmlPullParserException */ public static void main(String[] args) throws Exception { //创建对象 Student stu = new Student(); stu.setName("zhangsan"); stu.setAge("200"); //创建解析器工厂 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); //根据工厂创建解析器 XmlSerializer serializer = factory.newSerializer(); OutputStream out = new FileOutputStream("i:stu.xml"); //设置文件的地址 serializer.setOutput(out,"utf-8"); //把stu对象里面的数据 写到本地的xml文件中 serializer.startDocument(null,true); //生成开始students标签 serializer.startTag(null,"students"); //生成开始和结束的student标签 serializer.startTag(null,"student"); //生成name和age标签 serializer.startTag(null,"name"); //写入name的值 serializer.text(stu.getName()); serializer.endTag(null,"name"); serializer.startTag(null,"age"); serializer.text(stu.getAge()); serializer.endTag(null,"age"); serializer.endTag(null,"student"); //生成结束students标签 serializer.endTag(null,"students"); serializer.endDocument(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |