加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析

发布时间:2020-12-16 00:12:44 所属栏目:百科 来源:网络整理
导读:理解XML的解析,首先要理解什么是XML. XML语言 XML,即可扩展性标记语言。首先它是一种语言,是用于传输数据的语言而不是用于显示数据的语言,理解这一点很关键。大家可能都比较理解什么是HTML语言,HTML是用于显示网页的一种语言,用于显示数据,这是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 qName) throws SAXException {
        super.endElement(uri,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,length));
        }
        else{
            System.out.println(new String(ch,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":"炎热"}] } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读