• 新规:续航150公里以下新能源车取消补贴 2019-10-11
  • 法国革命时代,女人流行穿什么 2019-10-11
  • 黑龙江省县(市、区)委统战部长培训班举办 2019-10-06
  • “夏季第一瓜”竟是它! 2019-10-06
  • 《阿古顿巴》藏语版在藏语卫视首播 2019-09-06
  • 晋中市“三同步”推动互联网治理创新 2019-08-27
  • 法媒:研究称美国人常用药物或增加抑郁风险 2019-08-27
  • 宝贝是地名,你能想到这么浪漫的地名在哪儿吗? 2019-08-15
  • 何树山副省长到方圆机电调研指导工作 2019-08-15
  • 至尊时时彩票平台:[Java]socket xml消息包解析

    来源:本网整理

    彩票双色球历史开奖结果 www.s9h6.com 手动解析socket xml的消息包

    scrolltotop.offset(100,120); scrolltotop.init();

    [1].[文件] XmlPackParser.java ~ 8KB    (28) 跳至 [1]

    package com.ppstream.ugc.jobserver.util;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.List;
    
    import org.apache.commons.lang.StringUtils;
    import org.apache.commons.lang.math.NumberUtils;
    
    import com.ppstream.ugc.jobserver.core.data.JobTasksData;
    
    public class XmlPackParser {
    
    	private String msg;
    
    	public XmlPackParser() {
    	}
    	
    	public XmlPackParser(String inMsg) {
    		this.msg = inMsg;
    	}
    
    	public void setMsg(String inMsg) {
    		this.msg = inMsg;
    	}
    
    	public String decode(String fieldName) {
    		String _retStr = "";
    		String _match = "<" + fieldName + ">";
    		String _match2 = "</" + fieldName + ">";
    		int _nStartPos = msg.indexOf(_match) + _match.length();
    		int _nEndPos = msg.indexOf(_match2);
    		if (_nStartPos >= 0 && _nEndPos >= 0 && _nEndPos > _nStartPos) {
    			_retStr = this.msg.substring(_nStartPos, _nEndPos);
    		}
    		return _retStr;
    	}
    
    	/**
    	 * 找出第fromInx个<fieldName>的值, fromInx从1开始
    	 * 
    	 * @param fieldName
    	 * @param fromInx
    	 * @return
    	 */
    	public String decode(String fieldName, int fromInx) {
    		String _retStr = "";
    		String _match = "<" + fieldName + ">";
    		String _match2 = "</" + fieldName + ">";
    		int _nStartPos = StringUtils.ordinalIndexOf(msg, _match, fromInx) + _match.length();
    		int _nEndPos = StringUtils.ordinalIndexOf(msg, _match2, fromInx);
    		if (_nStartPos >= 0 && _nEndPos >= 0 && _nEndPos > _nStartPos) {
    			_retStr = this.msg.substring(_nStartPos, _nEndPos);
    		}
    
    		return _retStr;
    	}
    
    	public int decodeInt(String fieldName) {
    		int _nRet = -1;
    		String _strRet = this.decode(fieldName);
    		_strRet = _strRet.trim();
    		if (_strRet != null && _strRet.length() > 0)
    			_nRet = Integer.parseInt(_strRet);
    		return _nRet;
    	}
    
    	public int decodeInt(String fieldName, int fromIdx) {
    		int _nRet = -1;
    		String _strRet = this.decode(fieldName, fromIdx);
    		_strRet = _strRet.trim();
    		if (_strRet != null && _strRet.length() > 0)
    			_nRet = Integer.parseInt(_strRet);
    		return _nRet;
    	}
    
    	public long decodeLong(String fieldName) {
    		long _nRet = -1;
    		String _strRet = this.decode(fieldName);
    		_strRet = _strRet.trim();
    		if (_strRet != null && _strRet.length() > 0)
    			_nRet = NumberUtils.toLong(_strRet, 0);
    		return _nRet;
    	}
    
    	public long decodeLong(String fieldName, int fromIdx) {
    		long _nRet = -1;
    		String _strRet = this.decode(fieldName, fromIdx);
    		_strRet = _strRet.trim();
    		if (_strRet != null && _strRet.length() > 0)
    			_nRet = NumberUtils.toLong(_strRet);
    		return _nRet;
    	}
    
    	public Date decodeDate(String fieldName) {
    		Date _retDate = null;
    		String _strDate = this.decode(fieldName);
    		try {
    			SimpleDateFormat _df = new SimpleDateFormat("yyyyMMddHHmm");
    			_retDate = _df.parse(_strDate);
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    
    		return _retDate;
    	}
    
    	public boolean decodeBool(String fieldName) {
    		boolean _bRet = false;
    		String _strRet = this.decode(fieldName);
    		_strRet = _strRet.trim();
    		if (_strRet != null && _strRet.length() > 0)
    			_bRet = Boolean.parseBoolean(_strRet);
    		return _bRet;
    	}
    
    	public boolean check(String fieldName) {
    		String _match = "<" + fieldName + ">";
    		String _match2 = "</" + fieldName + ">";
    		int _nStartPos = msg.indexOf(_match) + _match.length();
    		int _nEndPos = msg.indexOf(_match2);
    		if (_nStartPos >= 0 && _nEndPos >= 0 && _nEndPos > _nStartPos)
    			return true;
    
    		return false;
    	}
    
    	public boolean check(String fieldName, int fromIdx) {
    		String _match = "<" + fieldName + ">";
    		String _match2 = "</" + fieldName + ">";
    		int _nStartPos = msg.indexOf(_match, fromIdx) + _match.length();
    		int _nEndPos = msg.indexOf(_match2, fromIdx);
    		if (_nStartPos >= 0 && _nEndPos >= 0 && _nEndPos > _nStartPos)
    			return true;
    
    		return false;
    	}
    
    	/**
    	 * 判断指定节点下的属性与值是否匹配
    	 * 能够在多个相同节点不同属性、不同属性值得情况下,找到需要的节点 
    	 * 返回匹配的多个节点内容 
    	 * @param fieldName 指定的节点
    	 * @param attribute 指定的属性
    	 * @param value 指定的属性值
    	 * @return 返回匹配的多个节点内容
    	 */
    	public List<String> equalsAttribute(String fieldName, String attribute, String value) {
    		List<String> result = new ArrayList<String>();
    		int fromInx = 1;
    		String _retStr = "";
    		String _match = "<" + fieldName+ " ";
    		String _match2 = "</" + fieldName + ">";
    		int _nStartPos = StringUtils.ordinalIndexOf(msg, _match, fromInx);
    		int _nEndPos = StringUtils.ordinalIndexOf(msg, _match2, fromInx);
    		while (_nStartPos >= 0 && _nEndPos >= 0 && _nEndPos > _nStartPos) {
    			_retStr = this.msg.substring(_nStartPos, _nEndPos);
    			int exist = _retStr.indexOf(attribute + "=\"" + value + "\"");
    			if (exist != -1) {
    				result.add(_retStr);
    			}
    			fromInx++;
    			_nStartPos = StringUtils.ordinalIndexOf(msg, _match, fromInx);
    			_nEndPos = StringUtils.ordinalIndexOf(msg, _match2, fromInx);
    		}
    		return result;
    	}
    
    	/**
    	 * 从给定的字符串中获取指定节点的内容
    	 * @param submsg 给定的字符串
    	 * @param fieldName 指定的节点
    	 * @return 指定节点的内容
    	 */
    	public String decodeSubmsg(String submsg, String fieldName) {
    		String _retStr = "";
    		if (StringUtils.isNotBlank(submsg)) {
    			String _match = "<" + fieldName + ">";
    			String _match2 = "</" + fieldName + ">";
    			int _nStartPos = submsg.indexOf(_match) + _match.length();
    			int _nEndPos = submsg.indexOf(_match2);
    			if (_nStartPos >= 0 && _nEndPos >= 0 && _nEndPos > _nStartPos) {
    				_retStr = submsg.substring(_nStartPos, _nEndPos);
    			}
    		}
    		return _retStr;
    	}
    
    	/**
    	 * 在给定的的字符串中获取指定属性的值
    	 * @param submsg	给定的字符串
    	 * @param attribute 属性
    	 * @return 返回属性值
    	 */
    	public String decodeAttribute(String submsg, String attribute) {
    		String value = "";
    		if (StringUtils.isNotBlank(submsg)) {
    			String _match = attribute + "=\"";
    			String _match2 = "\"";
    			int _nStartPos = submsg.indexOf(_match) + _match.length();
    			int _nEndPos = submsg.indexOf(_match2, _nStartPos);
    			if (_nStartPos >= 0 && _nEndPos >= 0 && _nEndPos > _nStartPos) {
    				value = submsg.substring(_nStartPos, _nEndPos);
    			}
    		}
    		return value;
    	}
    
    	public static void main(String[] args) {
    		String testMsg = "<?xml version=\"1.0\" encoding=\"utf-8\"?><success><video_id>8000040766</video_id><upip>222.73.48.192:9200</upip><path>\\20120420\\8000042009\\8000042009.rmvb</path><filename>2-104.rmvb</filename><sha1>9a59e568de6b7dcd4f6bf3fdd730e1cec51e5e54</sha1><file_size>10809501</file_size><width>320</width><height>240</height><bitrate>548</bitrate><playtime>64000</playtime><file_status>0</file_status><ugcfs_ver>1.0.1.26</ugcfs_ver><upload_id>8000042009</upload_id><special_op>NO_CONVERT</special_op><attachments><attachment type=\"subtitle\" attach_id=\"1021\"><sha1>57f94c55d81a672faa267d50a0b8be1dad43179d</sha1><path>\\20120420\\8000042009\\1021.srt</path></attachment><attachment type=\"config\" defination=\"low\" attach_id=\"1022\"><sha1>6172476e0c727a113b63a36bd33b76096689704f</sha1><path>\\20120420\\8000042009\\1022.xml</path></attachment><attachment type=\"config\" defination=\"normal\" attach_id=\"1023\"><sha1>9edf5e5f4fb297c3807db95ba5f3c66d9a035f71</sha1><path>\\20120420\\8000042009\\1023.xml</path></attachment><attachment type=\"config\" defination=\"high\" attach_id=\"1024\"><sha1>31ce06e929a28f073b8ea2fd63ca484fb573ffdb</sha1><path>\\20120420\\8000042009\\1024.xml</path></attachment><attachment type=\"config\" defination=\"baseline\" attach_id=\"1025\"><sha1>b5c59e633e8feaa3287b3c380e06c576b3b5a9f2</sha1><path>\\20120420\\8000042009\\1025.xml</path></attachment></attachments></success>";
    		XmlPackParser parser = new XmlPackParser(testMsg);
    		String fieldName = "attachment";
    		String attribute = "type";
    		JobTasksData data = new JobTasksData();
    		
    		String upip = parser.decode("upip");
    		System.out.println("upip = " + upip);
    		System.out.println("//*****************************************//");
    		List<String> list = parser.equalsAttribute(fieldName, attribute, "config");
    		if (list.size() > 0) {
    			Iterator<String> it = list.iterator();
    			while(it.hasNext()) {
    				String submsg = it.next();
    				System.out.println(submsg);
    				String value = parser.decodeAttribute(submsg, "defination");
    				System.out.println("defination = " + value);
    //				String path = parser.decodeSubmsg(submsg, "path");
    				String path = data.substringHttp(parser.decodeSubmsg(submsg, "path"),parser.decode("upip"));
    				System.out.println("path = " + path);
    			}
    		}
    	}
    
    }
    

  • 本文相关:
  • [PHP]PHP实现二分查找算法(折半算法)
  • [C/C++]累加
  • [Python]输出乘法表到excel
  • [JavaScript]原创图片带略缩图幻灯片Jquery插件
  • [C/C++]杨辉三角
  • [PHP]对二维数组指定项排序
  • [C/C++]字符串匹配出问题了
  • [Java]DES加密解密java和delphi通用
  • [JavaScript]超强退格删除,媲美 Backspace 键
  • [C/C++]最大公約數gcd (CLRS 33-1)
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 彩票双色球历史开奖结果 - 频道导航
    Copyright © 2017 彩票双色球历史开奖结果 www.s9h6.com All Rights Reserved
  • 新规:续航150公里以下新能源车取消补贴 2019-10-11
  • 法国革命时代,女人流行穿什么 2019-10-11
  • 黑龙江省县(市、区)委统战部长培训班举办 2019-10-06
  • “夏季第一瓜”竟是它! 2019-10-06
  • 《阿古顿巴》藏语版在藏语卫视首播 2019-09-06
  • 晋中市“三同步”推动互联网治理创新 2019-08-27
  • 法媒:研究称美国人常用药物或增加抑郁风险 2019-08-27
  • 宝贝是地名,你能想到这么浪漫的地名在哪儿吗? 2019-08-15
  • 何树山副省长到方圆机电调研指导工作 2019-08-15
  • 排列三跨度走势图南方 14场胜负彩19066期冷热指数 黑龙江快乐十分走势 香港创富资料中心 安徽时时选号 湖南人平特一肖 100%定三胆 福彩快3下载 11选5赚钱方法 天津时时彩开奖结果记录 竞彩足球预则 竞彩总进球数中奖经验 澳门星际xj 中国福利彩票如何选号 北京pk10牛牛软件