javaweb-xml解析&json解析

来源:互联网 发布:网络推广赚钱 编辑:程序博客网 时间:2024/05/22 17:53
1、myeclipse 破解版安装

    按照文档操作即可

2、myeclipse 的一些快捷方式

    ctrl + 1  万能键
    ctrl + /  提示,快速补全代码
    ctrl + shitf + f  代码格式化
    ctrl + s  保存
    alt + 方向键  向上或向下移动一行代码
    ctrl + alt + 方向键  快速复制一行代码
    ctrl + d  快速删除一行
    长按ctrl  查看源代码
    ctrl + m  全屏
    ctrl + shift + o 快速导包
    ctrl + t  快速查看类结构
    ctrl + shift + x 变大写
    ctrl + shift + y 变小写

3、junit测试

    可以在方法上边添加 @Test 注解,用来表示此方法是测试方法,省去了再创建main方法的步骤
    Assert断言可以判断测试的结果是否和期待的结果是一样的

    方法测试步骤
    a、添加junit jar包,myeclipse已经集成好了
    b、在测试方法的上边加上一个注释 @Test 即可
    c、添加断言方法,判断结果是否是预期的结果

    代码体现

import junit.framework.Assert;import org.junit.Test;/** *junit方法测试,并使用断言判断结果是否是预期结果  */public class JunitTest {@Testpublic void junitTest(){// 定义2个变量int i = 10;int j = 20;// 定义一个和int result = i - j;// 使用断言assert判断是否和预期结果相同Assert.assertEquals(30, result);}}

4、注解

    a、注解不是注释
    b、注解是一种标记,加上什么标记就做什么事情
    c、jdk1.5之后提供3种注解

    @SuppressWarnings("all")     压制警告
    @Deprecated     代表过时的
    @Override     重写父类方法


5、xml简介

    a、什么是xml

    xml是一种可扩展标记语言,全称是(EXtensible Markup Language)
    xml中没有预定义标签,可以自己定义标签
    html中的标签是定义好的

    b、xml的设计宗旨是什么
    用来传输数据存储数据(html是用来显示数据的)

    c、xml的标准(w3c推荐的标准)

    d、xml可以用来做配置文件  android工程中的清单文件就是xml文件

    总的来说:xml可以用来存储和传输数据,同时也可以用作配置文件

6、xml的声明

    a、格式是固定的,以后在开发软件中操作直接创建xml文件自动生成

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8" ?>    <student><name>张三</name><age>20</age>    </student></span>

     b、xml文件必须有且只有一个根元素

    c、要想验证xml文件是否正确,需要在浏览器中打开,如果能看到说明正确

    d、encoding="utf-8" 表示的是浏览器查看的编码,如果和编写程序的编码不同,会出现乱码情况

7、xml语法

    a、xml标签必须关闭
    b、xml标签对大小写敏感
    c、标签必须正确嵌套
    d、必须有一个根元素
    e、xml元素的属性必须加引号
    f、> < "" '' 一些特殊意义的字符,需要进行转义
    g、xml注释 <!--  里边写的是注释 -->
    h、CDATA区,这里的内容不会被解析
        <![CDATA[ 里边的内容不会被解析 ]]>
    i、xml中的空格会被保留,多个空格会保留一个


8、xml的三种解析
  
    DOM解析
    SAX解析
    StAX解析(xmlpull解析)

    A: dom解析: 文档对象模型(Document Object Model),这个是官方推荐的标准
    dom原理: 把要解析的xml文件全部加载到内存中,在内存中形成一个数结构

    注: dom解析把xml元素 属性 文本都当成是节点

    优点: 可以进行增删改查操作
    缺点: 如果xml文件过大,可能出现内存泄漏

    实现思路:
    通过工厂获取解析器实例,拿到解析器以后解析xml

<span style="white-space:pre"></span>   <span style="font-size:18px;">/** <span style="white-space:pre"></span> *使用dom解析xml文件  <span style="white-space:pre"></span> *并获取name标签的文本内容<span style="white-space:pre"></span> */public class DomTest {@Testpublic void domTest() throws Exception{// 获得工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 获得解析器DocumentBuilder builder = factory.newDocumentBuilder();// 解析xml public Document parse(String uri)Document books = builder.parse("bookstore.xml");// 获取标签名为name的node集合NodeList nodeList = books.getElementsByTagName("name");// 遍历集合,获取每一个元素for(int i = 0; i < nodeList.getLength(); i++){Node item = nodeList.item(i);// 获取内容String name = item.getTextContent();System.out.println("name : " + name);}}}</span>

 B: SAX解析
    sax解析思想,一边解析 一边处理 一边释放内存
    sax解析是一个自动解析的过程


    优点: 不会出现内存泄漏问题
    缺点: 不能进行 增 删 改 操作,可以进行 查 操作

    代码实现步骤
    1. 获取工厂
    2. 通过工厂获取解析器
    2.1. 准备事件处理器
    3. 解析xml

<span style="white-space:pre"></span><span style="font-size:18px;">public class SaxTest {@Testpublic void SaxTest() throws Exception{// 获取工厂SAXParserFactory factory = SAXParserFactory.newInstance();// 通过工厂获取解析器SAXParser parser = factory.newSAXParser();// 解析xml文件  public void parse(String uri,  DefaultHandler dh)// 需要传入一个 DefaultHandler// 创建 DefaultHandler的子类// 解析文件parser.parse("bookstore.xml", new MyDefaultHandler());}class MyDefaultHandler extends  DefaultHandler{// 重写父类方法// 接收文档开始通知@Overridepublic void startDocument() throws SAXException {super.startDocument();// 打印方法是为了能够看到效果System.out.println("文档开始");}// 接收元素开始通知@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {super.startElement(uri, localName, qName, attributes);System.out.println("startElement");}// 接收元素中字符数据的通知。@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {super.characters(ch, start, length);System.out.println("characters");}// 接收元素结束通知@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {super.endElement(uri, localName, qName);System.out.println("endElement");}// 接收文档结束通知@Overridepublic void endDocument() throws SAXException {super.endDocument();System.out.println("文档结束");}}}</span>

C: xmlpull解析

    原理: 类似sax解析,一边解析 一边处理 一边释放内存
        xmlpull 解析是android内置的

xmlpull解析和sax解析不同,xmlpull解析可以自己控制解析

    代码实现
    a. 导入xmlpullparser相关的jar包
    b. 具体代码实现

<span style="font-size:18px;">/** *使用xmlpull解析,并把解析后的内容添加到集合,最后遍历集合打印出信息  * *思路: *  1. 定义一个Student类,用来封装xml里的内容 *    2. 创建List集合对象,用来封装student对象 *    3. 获取工厂 *    4. 通过工厂获取解析器 *    5. 解析文件,并把符合条件的内容添加到相应的对象或集合中 *    6. 遍历集合,输出信息 */public class XmlPullTest {@Testpublic void xmlPull() throws Exception{// 创建集合对象和学生类对象List<Student> lists = null;Student student = null;// 获取工厂XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 通过工厂获取解析器XmlPullParser parser = factory.newPullParser();// 解析xml文件parser.setInput(new FileInputStream("student.xml"), "utf-8");int event = 0;while((event = parser.getEventType()) != XmlPullParser.END_DOCUMENT){// 解析中使用switch进行2次判断,一个是是否是元素开始,另一个是是否是元素结束switch(event){case XmlPullParser.START_TAG:// 判断是否是students元素开始,如果是,就创建list集合if("students".equals(parser.getName())){lists = new ArrayList<Student>();}else if("student".equals(parser.getName())){// 如果是以student开始,创建对象,并把id添加进对象中student = new Student();String id = parser.getAttributeValue(0);// 添加到对象student.setId(id);}else if("name".equals(parser.getName())){String name = parser.nextText();student.setName(name);}else if("age".equals(parser.getName())){int age = Integer.parseInt(parser.nextText());student.setAge(age);}break;case XmlPullParser.END_TAG:// 如果结束元素是"student"标签,就把对象添加到集合中if("student".equals(parser.getName())){lists.add(student);}break;}// 一直解析parser.next();}// 遍历集合,并把信息打印出来for (Student s : lists) {System.out.println(s);}}}</span>
9、JSON

    什么是 json
        json是一种轻量级的数据交换格式

    json 的特点
        数据格式更易于阅读,数据量比较小

    json格式有2种
        一种是: 对象,里边存放的是键值对 {name:'张三', age:20}
一种是: 数组,里边可以存放对象 [{name:'张三', age:20}, {name:'李四', age:30}]

10、json解析

    json解析的代码实现

<span style="font-size:18px;">public class JsonTest {@Testpublic void jsonTest() throws Exception{// json有2中格式// 第一种格式: 对象String jsonObject = "{name:'张三', age:18}";// 创建JSONObject对象JSONObject obj = new JSONObject(jsonObject);// 调用方法,通过键找值String objName = obj.getString("name");System.out.println("name:  " + objName);int objAge = obj.getInt("age");System.out.println("age:  " + objAge);// 第二种格式: 数组String jsonArray = "[{name:'张三', age:18},{name:'李四', age:20}]";// 创建JSONArray对象JSONArray arr = new JSONArray(jsonArray);// 遍历数组,获取每个对象中的值for(int i = 0; i < arr.length(); i++){JSONObject jsonArrObj = arr.getJSONObject(i);// 通过键找值String arrName = jsonArrObj.getString("name");int arrAge = jsonArrObj.getInt("age");System.out.println("arrName: " + arrName);System.out.println("arrAge: " + arrAge);}}}</span>


0 1
原创粉丝点击