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

关于SAXReader解析XML以及JSONObject和JSONArray的使用总结

发布时间:2020-12-16 05:22:39 所属栏目:百科 来源:网络整理
导读:近来才越来越感到Java知识的匮乏,先是 synchronized 和多线程管理的卡壳,现在将这几天用到的知识进行总结: 1.用SAXReader解析xml文档 使用SAXReader需要导入dom4j-full.jar包。 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非

近来才越来越感到Java知识的匮乏,先是synchronized和多线程管理的卡壳,现在将这几天用到的知识进行总结:

1.用SAXReader解析xml文档

使用SAXReader需要导入dom4j-full.jar包。

dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。

使用举例:

1. s.xml内容


[xhtml]
view plain copy
  1. <?xmlversion="1.0"encoding="GB2312"?>
  2. <data>
  3. rowqueryDTO.enterpriseId="gfd"queryDTO.loginName="gdfg"queryDTO.state="0"/>
  4. </>

2.解析

[c-sharp] copy
    importjava.io.File;
  1. importjava.io.FileInputStream;
  2. importjava.io.FileNotFoundException;
  3. importjava.util.Iterator;
  4. importjava.util.List;
  5. importorg.dom4j.Document;
  6. importorg.dom4j.DocumentException;
  7. importorg.dom4j.Element;
  8. importorg.dom4j.io.SAXReader;
  9. importorg.dom4j.tree.AbstractAttribute;
  10. publicclassReadXMLTest{
  11. staticvoidmain(String[]args){
  12. FilexmlFile=newFile("C:/s.xml");
  13. FileInputStreamfis=null;
  14. try{
  15. fis=newFileInputStream(xmlFile);
  16. }catch(FileNotFoundExceptione){
  17. e.printStackTrace();
  18. System.err.println("Fileisnotexsit!");
  19. }
  20. SAXReadersaxReader=newSAXReader();
  21. ListrowList=null;
  22. try{
  23. //生成文档对应实体
  24. Documentdoc=saxReader.read(fis);
  25. //获取指定路径下的元素列表,这里指获取所有的data下的row元素
  26. rowList=doc.selectNodes("//data/row");
  27. catch(DocumentExceptione){
  28. }
  29. for(Iteratoriter=rowList.iterator();iter.hasNext();){
  30. //获得具体的row元素
  31. Elementelement=(Element)iter.next();
  32. //获得row元素的所有属性列表
  33. ListelementList=element.attributes();
  34. for(Iteratoriter1=elementList.iterator();iter1.hasNext();){
  35. //将每个属性转化为一个抽象属性,然后获取其名字和值
  36. AbstractAttributeaa=(AbstractAttribute)iter1.next();
  37. System.out.println("Name:"+aa.getName()+";Value:"+aa.getValue());
  38. //输出:
  39. //Name:queryDTO.enterpriseId;Value:gfd
  40. //Name:queryDTO.loginName;Value:gdfg
  41. //Name:queryDTO.state;Value:0
  42. out.println(element.getName());
  43. //输出:
  44. //row
  45. //取得row元素的queryDTO.enterpriseId属性的值
  46. out.println(element.attributeValue("queryDTO.enterpriseId"));
  47. //gfd
  48. //如果element下有子元素,(类似width="**"),要想获得该子元素的值,可以用如下方法
  49. out.println(element.elementText("width"));//因为没有,所以输出为null。
  50. }

2. JSONArray的应用

从json数组中得到相应java数组,如果要获取java数组中的元素,只需要遍历该数组。

/**
      * 从json数组中得到相应java数组
      * JSONArray下的toArray()方法的使用
      * @param str
      * @return
      */
      public static Object[] getJsonToArray(String str) {
          JSONArray jsonArray = JSONArray.fromObject(str);
          return jsonArray.toArray();
      }

   public static void main(String[] args) {        
        JSONArray jsonStrs = new JSONArray();
        jsonStrs.add(0,"cat");
        jsonStrs.add(1,"dog");
        jsonStrs.add(2,"bird");
        jsonStrs.add(3,"duck");
        
        Object[] obj=getJsonToArray(jsonStrs.toString());
        for(int i=0;i<obj.length;i++){
              System.out.println(obj[i]);
        }
    }

从json数组中得到java数组,可以对该数组进行转化,如将JSONArray转化为String型、Long型、Double型、Integer型、Date型等等。
分别采用jsonArray下的getString(index)、getLong(index)、getDouble(index)、getInt(index)等方法。
同样,如果要获取java数组中的元素,只需要遍历该数组。

/**
      * 将json数组转化为Long型
      * @param str
      * @return
      */
     public static Long[] getJsonToLongArray(String str) {
          JSONArray jsonArray = JSONArray.fromObject(str);
          Long[] arr=new Long[jsonArray.size()];
          for(int i=0;i<jsonArray.size();i++){
              arr[i]=jsonArray.getLong(i);
              System.out.println(arr[i]);
          }
          return arr;
    }
     /**
      * 将json数组转化为String型
      * @param str
      * @return
      */
     public static String[] getJsonToStringArray(String str) {
          JSONArray jsonArray = JSONArray.fromObject(str);
          String[] arr=new String[jsonArray.size()];
          for(int i=0;i<jsonArray.size();i++){
              arr[i]=jsonArray.getString(i);
              System.out.println(arr[i]);
          }
          return arr;
    }
     /**
      * 将json数组转化为Double型
      * @param str
      * @return
      */
     public static Double[] getJsonToDoubleArray(String str) {
          JSONArray jsonArray = JSONArray.fromObject(str);
          Double[] arr=new Double[jsonArray.size()];
          for(int i=0;i<jsonArray.size();i++){
              arr[i]=jsonArray.getDouble(i);
          }
          return arr;
    }
     /**
      * 将json数组转化为Date型
      * @param str
      * @return
      */
     public static Date[] getJsonToDateArray(String jsonString) {

          JSONArray jsonArray = JSONArray.fromObject(jsonString);
          Date[] dateArray = new Date[jsonArray.size()];
          String dateString;
          Date date;
          SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
          for (int i = 0; i < jsonArray.size(); i++) {
              dateString = jsonArray.getString(i);
              try {
                  date=sdf.parse(dateString);
                  dateArray[i] = date;
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
          return dateArray;
    }


 public static void main(String[] args) {
            
        JSONArray jsonLongs = new JSONArray();
        jsonLongs.add(0,"111");
        jsonLongs.add(1,"222.25");
        jsonLongs.add(2,new Long(333));
        jsonLongs.add(3,444);
        
        Long[] log=getJsonToLongArray(jsonLongs.toString());
        for(int i=0;i<log.length;i++){
            System.out.println(log[i]);
        }
        
        JSONArray jsonStrs = new JSONArray();
        jsonStrs.add(0,"2011-01-01");
        jsonStrs.add(1,"2011-01-03");
        jsonStrs.add(2,"2011-01-04 11:11:11");
        
        Date[] d=getJsonToDateArray(jsonStrs.toString());        
        for(int i=0;i<d.length;i++){
            System.out.println(d[i]);
        }
    }
  /*结果如下:
     * 111
     * 222
     * 333
     * 444
     * 
     * Sat Jan 01 00:00:00 CST 2011
     * Mon Jan 03 00:00:00 CST 2011
     * Tue Jan 04 00:00:00 CST 2011
     */

3. JSONObject与JSONArray的使用

一、JAR包简介

要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:

1.commons-lang.jar

2.commons-beanutils.jar

3.commons-collections.jar

4.commons-logging.jar

5.ezmorph.jar

6.json-lib-2.2.2-jdk15.jar

二、JSONObject对象使用

JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包。在本例中,我们将使用JSONObject类创建JSONObject对象,然后我们打印这些对象的值。为了使用JSONObject对象,我们要引入"net.sf.json"包。为了给对象添加元素,我们要使用put()方法。

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

public class JSONObjectSample {

 //创建JSONObject对象   
    private static JSONObject createJSONObject(){   
        JSONObject jsonObject = new JSONObject();   
        jsonObject.put("username","huangwuyi");   
        jsonObject.put("sex","男");   
        jsonObject.put("QQ","413425430");   
        jsonObject.put("Min.score",new Integer(99));   
        jsonObject.put("nickname","梦中心境");   
        return jsonObject;   
    }   
    public static void main(String[] args) {   
        JSONObject jsonObject = JSONObjectSample.createJSONObject();   
        //输出jsonobject对象   
        System.out.println("jsonObject==>"+jsonObject);   
           
        //判读输出对象的类型   
        boolean isArray = jsonObject.isArray();   
        boolean isEmpty = jsonObject.isEmpty();   
        boolean isNullObject = jsonObject.isNullObject();   
        System.out.println("isArray:"+isArray+" isEmpty:"+isEmpty+" isNullObject:"+isNullObject);   
           
        //添加属性   
        jsonObject.element("address","北京市海淀区");   
        System.out.println("添加属性后的对象==>"+jsonObject);   
           
        //返回一个JSONArray对象   
        JSONArray jsonArray = new JSONArray();   
        jsonArray.add(0,"this is a jsonArray value");   
        jsonArray.add(1,"another jsonArray value");   
        jsonObject.element("jsonArray",jsonArray);   
        JSONArray array = jsonObject.getJSONArray("jsonArray");   
        System.out.println("返回一个JSONArray对象:"+array);   
        //添加JSONArray后的值   
//        {"username":"huangwuyi","sex":"男","QQ":"413425430","Min.score":99,"nickname":"梦中心境","address":"福建省厦门市","jsonArray":["this is a jsonArray value","another jsonArray value"]}  
        System.out.println("结果="+jsonObject);   
           
        //根据key返回一个字符串   
        String username = jsonObject.getString("username");   
        System.out.println("username==>"+username);  
        
        //把字符转换为 JSONObject
        String temp=jsonObject.toString();
        JSONObject object = JSONObject.fromObject(temp);
        //转换后根据Key返回值
        System.out.println("qq="+object.get("QQ"));
        
    }  

}


没想到一个小小的函数里用到了这么多东西:

public synchronized void loadPlayListXml(String base) throws Exception
	{
		if(playListDoc==null)
		{
			SAXReader reader = new SAXReader(false);
			playListDoc=reader.read(base+this.getFileName());
			String jsTemplate=this.playListDoc.getRootElement().selectSingleNode("templates").getText();
			joTemplates=JSONArray.fromObject(jsTemplate);
			String jsPlayList=this.playListDoc.getRootElement().selectSingleNode("data").getText();
			joPlayList=JSONArray.fromObject(jsPlayList);
			
			
			//设置是否循环播放
			Element cycle=(Element)this.playListDoc.getRootElement().selectSingleNode("cycle");
			if(cycle==null)
				this.setCycle("1");
			else
				this.setCycle(cycle.getText());
				
			//计算所有模板的播放时长
			JSONObject firstTemplate=joPlayList.getJSONObject(0);
			JSONObject lastTemplate=joPlayList.getJSONObject(joPlayList.size()-1);
			
			String startStr=firstTemplate.getString("start");
			String endStr=lastTemplate.getString("end");
			SimpleDateFormat sdf5=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//yyyy-MM-dd HH:mm:ss
			Date startD=sdf5.parse(startStr.replace("T"," "));
			Date endD=sdf5.parse(endStr.replace("T"," "));
			this.setDuring(endD.getTime()-startD.getTime());
			//素材列表
			List<Element> fileListEls=getPlayListDoc().getRootElement().selectNodes("list/resource");
			for(Element fileListEl:fileListEls)
			{
				MediaFile mf=new MediaFile();
				mf.parseFromXml(fileListEl);
				mf.playList=this;
				this.getMediaFiles().put(mf.id,mf);
			}
			//背景音乐
			Element elMusics=(Element)this.playListDoc.getRootElement().selectSingleNode("musics");
			if(elMusics!=null)
			{
				List<Element> listMusics=elMusics.selectNodes("music");
				for(Element elMusic:listMusics)
				{
					MediaFile mf=new MediaFile();
					mf.parseFromXml(elMusic);
					mf.playList=this;
					this.getMusicFiles().put(mf.id,mf);
				}
			}
		}
	}

(编辑:李大同)

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

    推荐文章
      热点阅读