XML解析

理解XML的解析,首先要理解什么是XML.

XML语言

  XML,即可扩展性标记语言。首先它是一种语言,是用于传输数据的语言而不是用于显示数据的语言,理解这一点很关键。大家可能都比较理解什么是HTML语言,HTML是用于显示网页的一种语言,用于显示数据,这是XML与其的不同点。因此我们也可以知道XML并不是HTML的代替品。
  XML语言是被计算机所识别的一种标记语言,计算机通过识别这种标记来处理包含各种信息的数据。
  
  java中有三种解析XML数据的工具,分别是DOM,SAX以及JSON.

DOM

DOM解析的步骤:

  1. 创建解析工厂对象。
  2. 通过解析工厂创建解析器对象。
  3. 通过解析器解析文档,构造解析文档对象。
  4. 以DOM对象为起点进行对解析树的增删改查。
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class TestDOM {
    public static void main(String[] args) {
        //创建解析器工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {           
            //根据解析器工厂创建解析器                                  
            DocumentBuilder builder = factory.newDocumentBuilder();
            //解析器解析文档
            Document document = builder.parse("D:\\11.txt");
            //解析文档的Weather标签。
            NodeList list = document.getElementsByTagName("Weather");
            //获得第一个weather标签。
            Node node = list.item(0);
            //获得第一个子标签。
            Node firstNode = node.getFirstChild();
            //获得下一个子标签。
            Node nextNode = firstNode.getNextSibling();
            while(nextNode!=null) {
                //判断节点类型是否是ELEMENT_NODE 
                if(nextNode.getNodeType()==Node.ELEMENT_NODE){
                    Node content = nextNode.getFirstChild();
                    if(content!=null){
                        System.out.println(nextNode.getFirstChild().getNodeValue().trim());
                    }
                }
                nextNode = nextNode.getNextSibling();
            }       
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

SAX

JSON对XML的解析:
  SAX解析的方法不常用。
解析步骤:

  1. 创建SAXParserFactory实例
  2. 创建SAXParser实例
  3. 创建SAXParserHandler类,继承DefaultHandler类,实现其5个方法 startDocument(), startElement(),endDocument(), endElement(), characters(), 然后在创建SAXParserHandler类的对象。
  4. 调用parser方法进行解析。
    解析程序:
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;

public class TestSAX {
    public static void main(String[] args) {
        //创建SAXParserFactory实例
        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            //创建SAXParser实例
            SAXParser parser = factory.newSAXParser();
            //创建SAXParserHandler实例
            MySAXHandler handler = new MySAXHandler();
            //调用parser方法进行解析。
            parser.parse(new File("D:\\11.txt"), handler);          
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

创建SAXParserHandler类:

import javax.xml.namespace.QName;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MySAXHandler extends DefaultHandler{
    private boolean isArrive = false;
    //接收文档开始
    @Override
    public void startDocument() throws SAXException {
        System.out.println("开始接受文档!");
        super.startDocument();
    }
    //解析文档开始
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        isArrive = qName.equals("xcz");
        System.out.println(qName);
    }
    //解析文档完成
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        System.out.println(qName);
        isArrive = false;
    }
    //接受文档完成
    @Override
    public void endDocument() throws SAXException {
        System.out.println("接受文档完成!");
        super.endDocument();
    }
    //内容
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        if(isArrive){
            System.out.println("我终于找到你了"+new String(ch,start, length));
        }
        else{
            System.out.println(new String(ch,start, length));
        }


    }

JSON

JSON对XML的解析:
  对XML进行解析首先要导入json 的jar包,这个包可以从网上下载,这里给出网址:
(http://pan.baidu.com/disk/home?fr=ibaidu#path=%252F)

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class TestJSON {
    public static void main(String[] args) {
        String json = creatJSON();
        JSONObject obj = JSONObject.fromObject(json);
        //获得Object中city的内容
        System.out.println(obj.getString("city"));
        //获得第一的Object中Today Object的内容。
        JSONObject today = obj.getJSONObject("today");
        //
        System.out.println(today.getString("date"));
        JSONArray array = today.getJSONArray("index");
        for (int i = 0; i < array.size(); i++) {
            JSONObject index = array.getJSONObject(i);
            System.out.println(index.getString("name"));            
        }               
    }
    //创建一个XML文件。
    private static String creatJSON() {
        JSONObject obj = new JSONObject();
        obj.put("city", "北京");
        obj.put("cityid", "123");
        //Object  Today的内容。
        JSONObject today = new JSONObject();
        today.put("date","2015-08-03" );
        today.put("week", "星期一");
        //Today中Array的内容
        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);
        //将Array放入Today
        today.put("index", array);
         //将Today放入Object中
        obj.put("today", today);
        System.out.println(obj.toString());
        return obj.toString();
    }
}

其中creatJSON()方法生成的XML文档的内容为:

{
    "city":"北京",
    "cityid":"123",
    "today":{
            "date":"2015-08-03",
            "week":"星期一",
            "index":
                [{"name":"感冒"},
                {"name":"防晒"},
                {"name":"炎热"}]
        }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小_爽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值