java基础第八讲——URL、XML的解析

目录

url
XML的解析

url

网址。例:http://www.baidu.com

/**
 * url的测试  将网路上的一张图片写到硬盘中
 * @author Administrator
 *
 */
public class Test {
    public static void main(String[] args) {
        urltest();
    }
    public static void urltest() {
        try {
            File file = new File("d://tangYan.jpg");
            if (!file.exists()) {
                file.createNewFile();
            }
            URL url = new URL("http://f.hiphotos.baidu.com/image/pic/item/5fdf8db1cb1349540cf84bbf534e9258d0094a02.jpg");
            InputStream is = url.openStream();
            byte[] array = new byte[1024];
            OutputStream os = new FileOutputStream(file);
            int i = is.read(array);
            while (i!=-1) {
                os.write(array, 0, i);
                i = is.read(array);
            }
            os.flush();
            os.close();
            is.close();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

xml的解析

形式
< a >开始标签
标题 (内容)
< / a >结束标签
可以嵌套
用来传输数据
*解析方式:

DOM解析
SAX解析
Json

DOM解析

(全部读到内存中 大小10M)
DOM 文档对象模型
把XML文映射成一个倒挂的树

·创建解析器工厂对象
·有解析器工厂对象创建解析器对象
·由解析器对象对指定的XML文件进行解析,创建相应的DOM树,创建Document对象
·以Document对象为起点对DOM树的节点进行增删改查操作用的多

//DOM解析测试
    public static void DOMtest() {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse("d://11.txt");
            NodeList list = document.getElementsByTagName("Weather");// 找到Weather标签
            Node node = list.item(0);                               // 找到第一个Weather标签
            Node child = node.getFirstChild();                      // 找到Weather下的第一个子标签city
            Node next = child.getNextSibling();                     // 得到city的下一个标签
            while (next != null) {                                  // 判断有没有走到最后一个标签
                if (next.getNodeType() == Node.ELEMENT_NODE) {      // 判断节点类型是不是ELEMENT_NODE
                    Node contant = next.getFirstChild();            // 得到该节点的第一个子节点不能为空
                    if (contant != null) {
                        System.out.println(contant.getNodeValue().trim());// String类型有一个方法trim去掉前后空格
                    }
                }
                next = next.getNextSibling();
            }
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

SAX解析

内存消耗小
这里写图片描述
步骤:
这里写图片描述

/**
 * 继承DefaultHandler类   SAX解析
 * 重写五个方法
 * 如果找单独的标签内容,需要先定义布尔值,然后当标签为所查标签时,输出打印内容。
 * @author Administrator
 *
 */
public class MySAXHandler extends DefaultHandler{
    private boolean isElement;
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        if (isElement) {            
            System.out.println("找到啦~~~"+new String(ch,start,length).trim());
        }
        System.out.println(new String(ch,start,length).trim());
    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
        System.out.println("解析文档结束");
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        System.out.println("标签结束");
        isElement = false;
    }

    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        System.out.println("解析文档开始");
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        isElement = qName.equals("city");
        System.out.println(localName+"标签开始"+qName);
    }

}

//SAX解析测试
    public static void SAXTest() {
        SAXParserFactory factory = SAXParserFactory.newInstance();//创建SAXParserFactory实例
        try {
            //创建SAXParser的实例
            SAXParser parser = factory.newSAXParser();
            //创建SAXHandler类
            MySAXHandler handler = new MySAXHandler();
            parser.parse(new File("d://11.txt"), handler);
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Json

必然用到

{}(Object)
[](Array)
key:value

/**
     * Json必然用到
     */
    public static void JsonTest() {
        String json = JSONString();
        JSONObject object = JSONObject.fromObject(json);
        System.out.println(object.get("city"));
        JSONObject today = object.getJSONObject("today");
        JSONArray array = today.getJSONArray("index");
        for (int i = 0; i < array.size(); i++) {
            JSONObject obj = array.getJSONObject(i);
            System.out.println(obj.getString("name"));
        }
    }
    //自己创建的一个JsonString
    public static String JSONString() {
        JSONObject obj = new JSONObject();
        obj.put("city", "北京");
        obj.put("cityid", "123");
        JSONObject today = new JSONObject();
        today.put("date", "2015-08-03");
        today.put("week", "星期一");
        JSONArray array = new JSONArray();
        JSONObject index1 = new JSONObject();
        index1.put("name", "感冒");
        JSONObject index2 = new JSONObject();
        index2.put("name", "炎热");
        JSONObject index3 = new JSONObject();
        index3.put("name", "防晒");
        array.add(index1);
        array.add(index2);
        array.add(index3);
        today.put("index", array);
        obj.put("today", today);
        System.out.println(obj.toString());
        return obj.toString();
    }

结果
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值