从url下载xml文件并解析(在流的状态直接解析)

该博客介绍了一个Java方法,用于从URL下载XML文件并在流状态下进行解析。通过HttpURLConnection建立连接,读取InputStream,然后使用DOM解析器处理XML内容。方法包括下载、转码、替换特殊字符以及根据不同条件调用不同解析和上传逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;

import com.google.gson.JsonObject;


public class QrReportOneKeyAutoManager {

	
	/**
	 * 下载并调用保存方法
	 * @param urlStr
	 * @param tempCode
	 * @param user
	 * @param beginDate
	 * @param endDate
	 * @param todayDate
	 * @throws Exception
	 */
	public static JsonObject downLoadAndUpload(String urlStr,String tempCode,User user,String beginDate,String endDate,String todayDate) throws Exception{
	  	long down=System.currentTimeMillis();
    	JsonObject result = new JsonObject();//最终结果
    	URL url = new URL(urlStr);    
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();    
                //设置超时间为3秒  
        conn.setConnectTimeout(30*1000);  
        //防止屏蔽程序抓取而返回403错误  
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");  
  
        //得到输入流  
        InputStream inputStream = conn.getInputStream();    
        //获取下载url的数据
        byte[] getData = OneKeyUploadUtil.readInputStream(inputStream);
        System.out.println(getData);
        String data = "";
		String newdata = "";
		try {
			data = new String( getData ,"gb2312");
			newdata = data.replaceAll("&", "&").replaceAll("<CLOB>", "null").toLowerCase();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			result.addProperty("success", false);
			result.addProperty("message", "上传数据失败(转码)");
		} finally{
			conn.disconnect();
			inputStream.close();
		}
		getData = newdata.getBytes("gb2312");
		System.out.println(getData);
		System.out.println("info:"+url+" download success");   
		System.out.println("downloadtime:"+(System.currentTimeMillis()-down)/1000+"s");
		JsonObject uploadResult = new JsonObject();//上传结果
		long up=System.currentTimeMillis();
		if(tempCode.equals(OneKeyUploadData.TEMPCODE_USER)){
			uploadResult = QrRptUserXmlUtil.parserAddXmlStr(newdata, todayDate);
		}else if(tempCode.equals(OneKeyUploadData.TEMPCODE_SALE)||tempCode.equals(OneKeyUploadData.TEMPCODE_IMPSALE)){
			uploadResult =QrRptParserXmlUtil.parserAddXmlStr(newdata, tempCode, user, todayDate);
		}else if(tempCode.equals(OneKeyUploadData.TEMPCODE_EAT)){
			uploadResult = QrRptParserXmlEatmonthUtil.parserAddXmlStr(newdata, tempCode, user, todayDate);
		}else{
			return null;
		}
		System.out.println("uploadtime:"+(System.currentTimeMillis()-up)/1000+"s");
		return uploadResult;
	}
    /** 
     * 从输入流中获取字节数组 
     * @param inputStream 
     * @return 
     * @throws IOException 
     */  
    public static  byte[] readInputStream(InputStream inputStream) throws IOException {   
        byte[] buffer = new byte[1024];    
        int len = 0;    
        ByteArrayOutputStream bos = new ByteArrayOutputStream();    
        while((len = inputStream.read(buffer)) != -1) { 
            bos.write(buffer, 0, len);    
        }    
        bos.close();    
        return bos.toByteArray();    
    }   
	public static JsonObject parserAddXmlStr(String xmlStr,String todayDate) throws ParseException {
		JsonObject result = new JsonObject();
		int insertCount = 0;//导入数量
		int updateCount=0;
		try {
			Document document = DocumentHelper.parseText(xmlStr);
			Element root = document.getRootElement();//获取Root
			Element data = root.element("data");//获取data
			Element enterusers = data.element("enterusers");//获取节点
			if(enterusers == null){
				result.addProperty("success", false);
				result.addProperty("message", "模版选择错误");
				return result;
			}
			System.out.println("判断是否有数据:"+ enterusers.elementIterator().hasNext());
			if(!enterusers.elementIterator().hasNext()){
				System.out.println("没有XX数据");
				result.addProperty("success", false);
				result.addProperty("message", "没有XX数据");
				return result;
			}
			
			//插入新的企业数据
			for (Iterator i = enterusers.elementIterator(); i.hasNext();) {
				Element enteruser = (Element) i.next();
				long id = Long.parseLong(enteruser.element("enteruserid").getText());//企业id
				...
			}
		}
		...
	}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值