XML

来源:互联网 发布:sql exists in 效率 编辑:程序博客网 时间:2024/06/15 04:54

语法

CDATA区

如果把标签里的内容当做一个普通文本显示,而不是当成标签来处理,那么

<![CDATA[内容]]>

xml解析

分类

  • dom解析
  • sax解析
  • pull解析

原理:

Dom解析

根据xml的层级结构在内存里面分配一个树形结构。
优点:方便实现增加、修改、删除操作。
缺点:如果文档过大,会造成内存溢出。

sax解析:

采用事件驱动的方式,边读边解析。
优点:不会造成内存溢出
缺点:不能实现增加、修改、删除的操作

pull解析的原理就是sax解析原理。

pull解析和序列化

xml文件必须放在src下,解析和序列化都需要jar包

解析

  • 得到解析器工厂
  • 通过工厂得到解析器
  • 把xml文件放到pull解析器中
  • 进行解析

stu.xml:

<?xml version="1.0" encoding="UTF-8"?><students>    <student>        <name>奥巴马</name>        <age>60</age>    </student>    <student>        <name>川普</name>        <age>70</age>    </student></students>
public static void main(String[] args) throws Exception {    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();    XmlPullParser parser = factory.newPullParser();    FileInputStream is = new FileInputStream("src/stu.xml");    parser.setInput(is, "utf-8");    int type = 0;    List<Student> list = null;    Student student = null;    while ((type = parser.getEventType()) != XmlPullParser.END_DOCUMENT) {        String tagName = parser.getName();        switch (type) {        case XmlPullParser.START_TAG:            if (tagName.equals("students")) {                list = new ArrayList<Student>();            } else if (tagName.equals("student")) {                student = new Student();            } else if (tagName.equals("name")) {                String name = parser.nextText();                student.setName(name);            } else if (tagName.equals("age")) {                String age = parser.nextText();                student.setAge(Integer.parseInt(age));            }            break;        case XmlPullParser.END_TAG:            if (tagName.equals("student")) {                list.add(student);            }            break;        default:            break;        }        parser.next();    }    for (Student stu : list) {        System.out.println(stu.toString());    }}

序列化:

public static void main(String[] args) throws Exception {    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();    XmlSerializer serializer = factory.newSerializer();    Student stu = new Student("安倍晋三",70);    FileOutputStream os = new FileOutputStream("e://stu.xml");    serializer.setOutput(os, "utf-8");    serializer.startDocument(null, true);    serializer.startTag(null,"students");    serializer.startTag(null, "student");    serializer.startTag(null, "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");    serializer.endTag(null,"students");    serializer.endDocument();}
原创粉丝点击