文章标题

XML

1.XML简介

  • 1,什么是XML
    • eXtensible Markup Language可扩展标记型语言.
      • 标记型语言: html也是标记型语言,都是使用标签进行操作.xml里面的操作也是使用标签进行操作.
      • 可扩展: html里面的标签,每个标签都有自己特定的含义,eg:< br/>,< hr/>等,但是在xml里面标签可以自己定义,eg:< aa>< /aa>,< name>< /name>等
      • xml的主要功能是存储数据,(html是显示数据).
      • xml的版本有1.0,1.1,一般使用1.0版本,它可以向下兼容.
  • 2,xml的应用
    • 一般用在三个地方:
      • 系统之间传输数据的格式
      • 表示生活中有关系的数据
      • 系统的配置文件

2.xml语法

  • 2.1 xml文档声明(必须第一行第一列)
    • < ?xml version = ‘1.0’ encoding = ‘utf-8’ standalone = ‘yes’?>
  • 2.2 xml元素的定义:
    • xml中定义的标签,得又开始标签和结束标签.
    • 有的标签没有内容,就在标签内结束eg:< aa/>.
    • xml标签可以嵌套,但必须合理签到< a>< b>< /b>< /a>.
    • 一个xml必须有且只能有一个根标签
    • 命名规范:
      • 区分大小写
      • 不能以数字或者下划线开头,不能以xml开头(Xml…)
      • 在标签中不能有空格
      • 标签中间不能有冒号”:”
  • 2.3 xml属性的定义:
    • 在xml标签里面可以有多个属性,但是属性名称不能相同(这不是废话吗).
    • 属性和属性值之间需要用”=”隔开,属性值用引号引住.”属性值”.
    • 属性名称的命名规范与元素命名规范一样.
  • 2.4 xml注释:
    • 写法< !– 注释内容 –>
    • 注释不能嵌套.
  • 2.5 xml的CDATA区域
    • 写法

3.XML解析简介

  • 3.1xml解析方法分类
    • 第一种:dom解析–根据xml层级结构,在内存分配树形结构.
      • 优点:很方便的实现增加,修改,删除扥操作
      • 缺点:如果解析的文件过大,可能造成内存溢出
    • 第二种:sax解析:–边读边解析
      • 优点:不会造成内存溢出
      • 缺点:不能实现增加,修改,删除的操作
    • 第三种:pull解析
      • 首先导入pull的jar包(两个1.KXML2-2.3.0jar,2.xmlpull_1_1_3_4c.jar)
      • 创建解析器工厂
      • 创建解析器
      • 创建需要解析文件的输入流
      • 把文件放到解析器里面
        • 把(集合)里面的数据写到xml文件中(序列化factory.xmlserilizable)
          • 创建解析器工厂
          • 创建序列器
          • 创建序列的输出流
          • 把文件放到序列器
          • 开始序列化.代码如下:
   
>   解析xml:
package com.heima.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.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

public class TestPull02 {

    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        // 创建解析器工厂
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        // 根据工厂获得解析器
        XmlPullParser parser = factory.newPullParser();
        // 创建文件io流
        InputStream in = new FileInputStream("src/stu.xml");
        // 把文件放到解析器里面
        parser.setInput(in, "utf-8");
        // 开始解析
        int type = 0;
        List 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();
                }else if("student".equals(tagname)){
                    student = new Student();
                }else if("name".equals(tagname)){
                    String name = parser.nextText();
                    student.setName(name);
                }else if("age".equals(tagname)){
                    String age = parser.nextText();
                    student.setAge(age);
                }
                break;
            case XmlPullParser.END_TAG:
                //当解析到结束时,把对象放到list里面
                if("student".equals(tagname)){
                    list.add(student);
                }
                break;
            default:
                break;
            }
            //向下执行
            parser.next();
        }
        for (Student s : list) {
            System.out.println(s);
        }
    }

-----------------------------------------------
        xml序列化
package com.heima.seri;

import java.io.FileOutputStream;
import java.io.OutputStream;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;

import com.heima.pull.Persons;

public class TestPull3 {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        Persons s = new Persons();
        s.setName("燕青");
        s.setAge("22");

        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        XmlSerializer serializer = factory.newSerializer();
        OutputStream os = new FileOutputStream("src/person1.xml");
        serializer.setOutput(os,"utf-8");
        serializer.startDocument(null, true);
        serializer.startTag(null, "persons");
        serializer.startTag(null, "person");
        serializer.startTag(null, "name");
        serializer.text(s.getName());
        serializer.endTag(null, "name");
        serializer.startTag(null, "age");
        serializer.text(s.getAge());
        serializer.endTag(null, "age");
        serializer.endTag(null, "person");
        serializer.endTag(null, "persons");
        serializer.endDocument();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值