Java 解析http返回的xml数据

2023-11-13

Java 解析http返回的xml数据,写成txt文件

需求:

每小时抓取给定api接口返回的xml数据,把xml数据保存为XML文件;把xml数据转换txt文件格式数据,保存txt文件。
文件名以yyyyMMddHH0000.txt和yyyyMMddHH0000.xml方式命名,如20180703090000.xml,表示2018年7月3日上午9时下载的数据

api说明:

GetLastHoursData 获取任意小时小时数据 请求案例:
http://59.172.208.250:8001/AppServer/PublishData.asmx/GetLastHoursData?UsrName={账号}&passWord={密码}&date=2017-11-13%2012:00:00

返回数据格式:

<ArrayOfLt_HourAqiModel xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
  <Lt_HourAqiModel>
    <StationName>刘家沟</StationName>
    <UniqueCode>420300052</UniqueCode>
    <QueryTime>2018-07-03 09:00:00</QueryTime>
    <PM25OneHour>NA</PM25OneHour>
    <PM10OneHour>NA</PM10OneHour>
    <SO2OneHour>NA</SO2OneHour>
    <NO2OneHour>NA</NO2OneHour>
    <COOneHour>NA</COOneHour>
    <O3OneHour>NA</O3OneHour>
    <AQI>NA</AQI>
    <PrimaryEP />
    <AQDegree />
    <AQType />
  </Lt_HourAqiModel>
  <Lt_HourAqiModel>
    <StationName>大冶市</StationName>
    <UniqueCode>420200402</UniqueCode>
    <QueryTime>2018-07-03 09:00:00</QueryTime>
    <PM25OneHour>NA</PM25OneHour>
    <PM10OneHour>NA</PM10OneHour>
    <SO2OneHour>NA</SO2OneHour>
    <NO2OneHour>NA</NO2OneHour>
    <COOneHour>NA</COOneHour>
    <O3OneHour>NA</O3OneHour>
    <AQI>NA</AQI>
    <PrimaryEP />
    <AQDegree />
    <AQType />
  </Lt_HourAqiModel>
</ArrayOfLt_HourAqiModel>

第一步

编写配置文件url.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- http://59.172.208.250:8001/AppServer/PublishData.asmx/ GetLastHoursData? 
    UsrName={账号}&passWord={密码}&date=2017-11-13%2012:00:00 -->
<pm25>
    <baseUrl>http://59.172.208.250:8001/AppServer/PublishData.asmx/
    </baseUrl>
    <method>GetLastHoursData
    </method>
    <UsrName>a******n
    </UsrName>
    <passWord>I*****XWO
    </passWord>
    <xmlSavePath>K:\baidudownload\</xmlSavePath>
    <txtSavePath>K:\baidudownload\</txtSavePath>
</pm25>

导入日志记录jar包,记录每小时的流程

1.log4j-api-2.3.jar
2.log4j-core-2.3.jar

第二步:解析下载所需要的配置xml文件

1.获取url链接
2.获取xml文件的存放路径
3.获取txt文件的存放路径

package cn.whu.edu.sendimage.pm25.spider;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

public class XMLReaderUtil {
    private static Document document;
    private static final Logger logger = LogManager.getLogger("XMLReaderUtil.class");

    public XMLReaderUtil(String path) throws SAXException, IOException, ParserConfigurationException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = factory.newDocumentBuilder();
        XMLReaderUtil.document = db.parse(path);
    }

    // 拼接url路径,时间从每小时从系统时间触发获得
    public String getUrl() throws Exception {
        StringBuilder sb = new StringBuilder();
        String baseurl = document.getElementsByTagName("baseUrl").item(0).getFirstChild().getNodeValue().trim();
        sb.append(baseurl);
        String method = document.getElementsByTagName("method").item(0).getFirstChild().getNodeValue().trim();
        sb.append(method);
        sb.append("?");
        String UsrName = document.getElementsByTagName("UsrName").item(0).getFirstChild().getNodeValue().trim();
        sb.append("UsrName=" + UsrName);
        sb.append("&");
        String passWord = document.getElementsByTagName("passWord").item(0).getFirstChild().getNodeValue().trim();
        sb.append("passWord=" + passWord);
        logger.info(sb.toString());
        return sb.toString();
    }

    // 获取xml存放路径
    public String getXmlSavePath() throws Exception {
        String xmlSavePath = document.getElementsByTagName("xmlSavePath").item(0).getFirstChild().getNodeValue().trim();
        logger.info(xmlSavePath);
        return xmlSavePath;
    }

    // 获取txt存放路径
    public String getTxtSavePath() {
        String txtSavePath = document.getElementsByTagName("txtSavePath").item(0).getFirstChild().getNodeValue().trim();
        logger.info(txtSavePath);
        return txtSavePath;
    }

    public static void main(String[] args) throws Exception {
        XMLReaderUtil reader = new XMLReaderUtil("url2.xml");
        String url = reader.getUrl();
        String xmlpath = reader.getXmlSavePath();
        String txtpath = reader.getTxtSavePath();
        System.out.println(url);
        System.out.println(xmlpath);
        System.out.println(txtpath);
    }
}


第三步:爬取一个url的数据

导入httpClient包

httpClient下载链接:http://hc.apache.org/downloads.cgi
这里写图片描述

获取http数据写入xml文件

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.apache.http.HttpEntity;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Spider {

    private static final Logger logger = LogManager.getLogger("Spider.class");

    public static void start() throws Exception {

        // 读取xml,
        XMLReaderUtil util = null;
        try {
            util = new XMLReaderUtil("url2.xml");
        } catch (Exception e) {
            e.printStackTrace();
        }
        String url = util.getUrl();
        String xmlpath = util.getXmlSavePath();
        String txtpath = util.getTxtSavePath();
        String time = getBeijingTimeStr();

        //写入xml文件
        getHttpJson(url, getUrlDate(), xmlpath);

        // xml变为txt
        Xml2Txt xml2txt = new Xml2Txt(xmlpath + time + ".xml", txtpath + time + ".txt");
        xml2txt.start();
    }

    //url中需要的时间格式
    private static String getUrlDate() {
        Calendar cal = Calendar.getInstance();
        // date=2017-11-13%2012:00:00
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd%20HH:00:00");
        String dateString = sdf.format(cal.getTime());
        return dateString;
    }

    //拼接url需要的时间。下载数据放入其中xml文件中
    private static void getHttpJson(String url, String time, String path) throws InterruptedException {

        logger.info("getHttpJson========================================");

        String urlTail = "&date=" + time;
        // 建立一个新的请求客户端
        HttpClient httpClient = HttpClients.createDefault();
        HttpGet httpGet = null;
        // 获取网址的返回结果
        CloseableHttpResponse response = null;
        System.out.println(url + urlTail);
        httpGet = new HttpGet(url + urlTail);
        try {
            response = (CloseableHttpResponse) httpClient.execute(httpGet);
            // System.out.println(response);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 获取返回结果中的实体
        HttpEntity entity = response.getEntity();

        try {
            // EntityUtils.toString(entity);
            InputStream in = entity.getContent();
            //写入xml文件
            File file = new File(path + getBeijingTimeStr() + ".xml");
            if (!file.exists()) {
                file.createNewFile();
            }

            try {
                FileOutputStream fout = new FileOutputStream(file);
                int l = -1;
                byte[] tmp = new byte[1024];
                while ((l = in.read(tmp)) != -1) {
                    fout.write(tmp, 0, l);
                    // 注意这里如果用OutputStream.write(buff)的话,图片会失真,大家可以试试
                }
                fout.flush();
                fout.close();
            } finally {
                // 关闭低层流。
                in.close();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //文件名的前缀
    private static String getBeijingTimeStr() {
        StringBuffer BeijingTimeBuffer = new StringBuffer();
        // 1、取得本地时间:
        Calendar c1 = Calendar.getInstance();
        // 获得年份
        int year = c1.get(Calendar.YEAR);
        // 获得月份
        int month = c1.get(Calendar.MONTH) + 1;
        // 获得日期
        int day = c1.get(Calendar.DATE);
        // 获得小时
        int hour = c1.get(Calendar.HOUR_OF_DAY);

        BeijingTimeBuffer.append(year).append(String.format("%02d", month)).append(String.format("%02d", day));
        BeijingTimeBuffer.append(String.format("%02d", hour)).append("00").append("00");
        return BeijingTimeBuffer.toString();
    }

    public static void main(String[] args) throws Exception {
        start();
    }
}

第四步:解析下载的xml文件,写成txt

使用xstream包
下载xstream包链接:http://x-stream.github.io/
导入以下三个包:

1.xstream-1.4.10.jar
2.xpp3_min-1.1.4c.jar
3.xmlpull-1.1.3.1.jar

根据xml标签创建类:ArrayOfLt_HourAqiModel;Lt_HourAqiModel
1.ArrayOfLt_HourAqiModel类:

import java.util.List;

public class ArrayOfLt_HourAqiModel {
    private List<Lt_HourAqiModel> Lt_HourAqiModel;

    public void add(Lt_HourAqiModel lt) {
        Lt_HourAqiModel.add(lt);
    }

    public List<Lt_HourAqiModel> getContent() {
        return Lt_HourAqiModel;
    }
}

2.Lt_HourAqiModel类


public class Lt_HourAqiModel {
    // <Lt_HourAqiModel>
    // <StationName>刘家沟</StationName>
    // <UniqueCode>420300052</UniqueCode>
    // <QueryTime>2018-07-02 16:00:00</QueryTime>
    // <PM25OneHour>NA</PM25OneHour>
    // <PM10OneHour>NA</PM10OneHour>
    // <SO2OneHour>NA</SO2OneHour>
    // <NO2OneHour>NA</NO2OneHour>
    // <COOneHour>NA</COOneHour>
    // <O3OneHour>NA</O3OneHour>
    // <AQI>NA</AQI>
    // <PrimaryEP/>
    // <AQDegree/>
    // <AQType/>
    // </Lt_HourAqiModel>

    private String StationName;
    private String UniqueCode;
    private String QueryTime;
    private String PM25OneHour;
    private String PM10OneHour;
    private String SO2OneHour;

    private String NO2OneHour;
    private String COOneHour;
    private String O3OneHour;
    private String AQI;
    private String PrimaryEP;
    private String AQDegree;
    private String AQType;

    @Override
    public String toString() {
        return "Lt_HourAqiModel [StationName=" + StationName + ", UniqueCode=" + UniqueCode + ", QueryTime=" + QueryTime
                + ", PM25OneHour=" + PM25OneHour + ", PM10OneHour=" + PM10OneHour + ", SO2OneHour=" + SO2OneHour
                + ", NO2OneHour=" + NO2OneHour + ", COOneHour=" + COOneHour + ", O3OneHour=" + O3OneHour + ", AQI="
                + AQI + ", PrimaryEP=" + PrimaryEP + ", AQDegree=" + AQDegree + ", AQType=" + AQType + "]";
    }

    public String getStationName() {
        return StationName;
    }

    public void setStationName(String stationName) {
        StationName = stationName;
    }

    public String getUniqueCode() {
        return UniqueCode;
    }

    public void setUniqueCode(String uniqueCode) {
        UniqueCode = uniqueCode;
    }

    public String getQueryTime() {
        return QueryTime;
    }

    public void setQueryTime(String queryTime) {
        QueryTime = queryTime;
    }

    public String getPM25OneHour() {
        return PM25OneHour;
    }

    public void setPM25OneHour(String pM25OneHour) {
        PM25OneHour = pM25OneHour;
    }

    public String getPM10OneHour() {
        return PM10OneHour;
    }

    public void setPM10OneHour(String pM10OneHour) {
        PM10OneHour = pM10OneHour;
    }

    public String getSO2OneHour() {
        return SO2OneHour;
    }

    public void setSO2OneHour(String sO2OneHour) {
        SO2OneHour = sO2OneHour;
    }

    public String getNO2OneHour() {
        return NO2OneHour;
    }

    public void setNO2OneHour(String nO2OneHour) {
        NO2OneHour = nO2OneHour;
    }

    public String getCOOneHour() {
        return COOneHour;
    }

    public void setCOOneHour(String cOOneHour) {
        COOneHour = cOOneHour;
    }

    public String getO3OneHour() {
        return O3OneHour;
    }

    public void setO3OneHour(String o3OneHour) {
        O3OneHour = o3OneHour;
    }

    public String getAQI() {
        return AQI;
    }

    public void setAQI(String aQI) {
        AQI = aQI;
    }

    public String getPrimaryEP() {
        return PrimaryEP;
    }

    public void setPrimaryEP(String primaryEP) {
        PrimaryEP = primaryEP;
    }

    public String getAQDegree() {
        return AQDegree;
    }

    public void setAQDegree(String aQDegree) {
        AQDegree = aQDegree;
    }

    public String getAQType() {
        return AQType;
    }

    public void setAQType(String aQType) {
        AQType = aQType;
    }

}

从xm文件中转换为对象,并写入txt

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.thoughtworks.xstream.XStream;

public class Xml2Txt {
    private static final Logger logger = LogManager.getLogger("Xml2Txt.class");

    private String xmlPath;
    private String txtPath;

    public Xml2Txt(String xmlPath, String txtPath) {
        super();
        this.xmlPath = xmlPath;
        this.txtPath = txtPath;
    }

    public String getXmlPath() {
        return xmlPath;
    }

    public void setXmlPath(String xmlPath) {
        this.xmlPath = xmlPath;
    }

    public String getTxtPath() {
        return txtPath;
    }

    public void setTxtPath(String txtPath) {
        this.txtPath = txtPath;
    }


    //从xml文件获取数据转换为对象列表
    public static List<Lt_HourAqiModel> getXmlDataList(String xmlPath) {
        logger.info("======getXmlDataList========");
        logger.info("xmlPath:"+xmlPath);
        XStream xstream = new XStream();
        xstream.alias("ArrayOfLt_HourAqiModel", ArrayOfLt_HourAqiModel.class);
        xstream.alias("Lt_HourAqiModel", Lt_HourAqiModel.class);

        xstream.addImplicitCollection(ArrayOfLt_HourAqiModel.class, "Lt_HourAqiModel");
        ArrayOfLt_HourAqiModel ArrayOfLt = (ArrayOfLt_HourAqiModel) xstream.fromXML(new File(xmlPath));
        logger.info(ArrayOfLt.getContent());
        return (ArrayOfLt.getContent());

    }

    //把对象列表写入txt
    public static void WriteStringToTxtFile(List<Lt_HourAqiModel> list, String txtPath) throws IOException {
        logger.info("================WriteListToTxtFile========================");
        // System.out.println(json);
        logger.info("写入地址:" + txtPath);
        File file = new File(txtPath);
        if (!file.exists()) {
            file.createNewFile();
        }
        if (list == null||list.size()==0) {
            logger.info("list size is null or size is 0");
            return;
        } else {

            FileWriter out = new FileWriter(file, true); // 文件写入流

            // 判断文件是都为空,如果不为空,说明有列标题,那么直接写入数组。如果为空,则写入列标题
            if (file.exists() && file.length() != 0) {
                for (Lt_HourAqiModel lt : list) {

                    out.write(lt.getStationName() + "\t");
                    out.write(lt.getUniqueCode() + "\t");
                    out.write(lt.getQueryTime() + "\t");
                    out.write(lt.getPM25OneHour() + "\t");
                    out.write(lt.getNO2OneHour() + "\t");
                    out.write(lt.getCOOneHour() + "\t");
                    out.write(lt.getO3OneHour() + "\t");
                    out.write(lt.getAQI() + "\t");
                    out.write(lt.getPrimaryEP() + "\t");
                    out.write(lt.getAQDegree() + "\t");
                    out.write(lt.getAQType() + "\t");

                    out.write("\r\n");
                }
            } else if (file.exists() && file.length() == 0) {
                out.write("StationName" + "\t" + "UniqueCode" + "\t" + "QueryTime" + "\t" + "PM25OneHour" + "\t"
                        + "PM10OneHour" + "\t" + "SO2OneHour" + "\t" + "NO2OneHour" + "\t" + "COOneHour" + "\t"
                        + "COOneHour" + "\t" + "O3OneHour" + "\t" + "AQI" + "\t" + "PrimaryEP" + "\t" + "AQDegree"
                        + "\t" + "AQType" + "\t\r\n");
                for (Lt_HourAqiModel lt : list) {
                    // <Lt_HourAqiModel>
                    // <StationName>刘家沟</StationName>
                    // <UniqueCode>420300052</UniqueCode>
                    // <QueryTime>2018-07-02 16:00:00</QueryTime>
                    // <PM25OneHour>NA</PM25OneHour>
                    // <PM10OneHour>NA</PM10OneHour>
                    // <SO2OneHour>NA</SO2OneHour>
                    // <NO2OneHour>NA</NO2OneHour>
                    // <COOneHour>NA</COOneHour>
                    // <O3OneHour>NA</O3OneHour>
                    // <AQI>NA</AQI>
                    // <PrimaryEP/>
                    // <AQDegree/>
                    // <AQType/>
                    // </Lt_HourAqiModel>
                    out.write(lt.getStationName() + "\t");
                    out.write(lt.getUniqueCode() + "\t");
                    out.write(lt.getQueryTime() + "\t");
                    out.write(lt.getPM25OneHour() + "\t");
                    out.write(lt.getNO2OneHour() + "\t");
                    out.write(lt.getCOOneHour() + "\t");
                    out.write(lt.getO3OneHour() + "\t");
                    out.write(lt.getAQI() + "\t");
                    out.write(lt.getPrimaryEP() + "\t");
                    out.write(lt.getAQDegree() + "\t");
                    out.write(lt.getAQType() + "\t");

                    out.write("\r\n");
                }
            }
            out.close();
        }
    }

    public void start() throws IOException {
        List<Lt_HourAqiModel> list = getXmlDataList(this.xmlPath);
        logger.info(list);
        WriteStringToTxtFile(list, this.txtPath);
    }

}

第五步:定时任务调度

每小时下载一次
创建任务

import java.util.Date;
import java.util.TimerTask;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;



public class Tasker extends TimerTask{

    private static final Logger logger = LogManager.getLogger("TimerTask.class");
    @Override
    public void run() {
        logger.info("============开始执行"+new Date()+"===================");

        try {
            Spider.start();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

调度程序

import java.util.Timer;

public class PMTimer {

    public static void main(String[] args) {
        Timer timer = new Timer();
        Tasker tasker = new Tasker();

        timer.schedule(tasker, 0L, 60*60*1000L);


    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 解析http返回的xml数据 的相关文章

随机推荐

  • SimpleDateFormat模式字符串格式

    SimpleDateFormat模式字符串 new SimpleDateFormat String parm parm为一个字符串 表示格式 时间模式 字母 时间元素 表示 示例 y 年 Year 1996 96 M 年中的月份 Month
  • PyTorch基础之模型保存与重载模块、可视化模块讲解(附源码)

    训练模型时 在众多训练好的模型中会有几个较好的模型 我们希望储存这些模型对应的参数值 避免后续难以训练出更好的结果 同时也方便我们复现这些模型 用于之后的研究 PyTorch提供了模型的保存与重载模块 包括torch save 和torch
  • jvm内存模型与垃圾回收(下)

    上篇地址 jvm内存模型与垃圾回收 上 1 垃圾回收相关算法 标记清除 标记整理 复制 这三个看上面的文章 1 1 分代收集算法 将不同生命周期的对象采用不同的收集方式 以便提高回收效率 一般是将Java堆分为新生代和老年代 这样可以根据各
  • 接口与实现

    public interface Computable 接口体包含常量和抽象方法 没有普通方法 int MAX 46 常量 int f int x 抽象方法 默认权限friendly public class China implement
  • 【C++】使用Windows操作系统的API在控制台输出绿色的文本

    2023年8月21日 周一下午 include
  • linux桌面远程控制,在LINUX下远程控制WIN桌面

    rdesktop 是个在veket下访问视窗系统 远程桌面的客户端程式 当前 rdesktop 所支持的 视窗系统 系列版本包括 NT 2000 XP 和2003 通过使用 rdesktop 所实现的远程桌面协议 RDP 你能在veket系
  • 企业微信群机器人开发

    准备工作 已经注册了有效的企业微信账号 并且在客户端上已经登录 现有或者新建有效的包含多名企业微信成员的群聊 创建群聊机器人 右键群聊 gt 管理聊天信息 gt 添加群机器人 使用群机器人 在终端某个群组添加机器人之后 创建者可以在机器人详
  • 【单片机笔记】STM32+ESP8266通过AT指令WIFI连接阿里云MQTT服务器

    上一篇使用USB转串口的方式通过ESP8266wifi模块的方式成功连接上了阿里云 现在就要通过单片机来替换电脑上位机了 这样单片机自动的去调用并发送串口数据更加方便 也更加符合一个产品的开发 板载的传感器有NTC温度 光强 这两个主要用来
  • 音频采样率、采样深度、占用字节数浅析

    1 从一个问题来看 16K采样率 16bit采样深度 20ms的数据共占用多少字节 想要解这个问题 首先就要明白采样率是什么 它的单位是什么 采样率 就是指音频在每秒的采样次数 采样多少个点 单位是赫兹 hz 在这里 尤其不要与比特率 bp
  • wxc-icon使用

  • Vue3中的computed函数详解

    计算属性是Vue中常用的一种方式 主要用于在模板中放置逻辑计算 方便开发者进行数据操作和展示 在Vue3中 计算属性依然是非常重要的一种功能 而computed函数则更加的方便计算属性的使用 本文将对Vue3中的computed函数进行详细
  • 修改约束(注意是否存在字段名的情况)

    添加字段名时添加约束 语法 alter table 表名 add 字段名 数据类型 约束名 注意 这个方法会让表中让所有address都变成 中国 表达有点不清晰 自己去试试此方法和其他方法就知道了 例如 alter table emp a
  • 汇编语言笔记-ARM架构基本寄存器

    文章目录 寄存器组 1 R0 R12 2 R13 3 R14 4 R15 特殊寄存器 程序状态寄存器 xPSR 中断 异常屏蔽寄存器 CONTROL寄存器 浮点寄存器 1 S0 S31和D0 D15 浮点状态和控制寄存器 FPSCR 浮点单
  • 玩转ChatGPT:Excel操作初探

    一 写在前面 首先还是让小Chat推销下自己 Excel 表格制作是个技术活 你掌握了吗 没关系 现在有了 ChatGPT 让 Excel 辅助操作变得更简单 再也不用苦恼于数据分析和整理了 让 ChatGPT 成为你的数据处理助手 让 E
  • FISCO BCOS 区块链应用(五)结合WeBase开发区块链目录管理系统

    目录 前提条件及说明 1 1 搭建Fisco Bcos区块链底层平台 1 2 搭建java项目并引入 web3sdk 1 3 搭建WeBase区块链管理平台 应用开发 1合约设计 2代码实现 3合约编译 4 java SDK集成 应用端对接
  • linux系统 <linux/fs.h>头文件查找

    起因 因为在做模块实验时要对register chrdev函数绘画流程图 于是我就想着去找找看到底这个函数在哪 首先根据这个笔记来看 Linux内核API register chrdev 极客笔记 deepinout com 应该在linu
  • CJson-修改浮点数的位数

    现状 调用cJSON Print 将组成的json转为字符串格式时 对于浮点数的位数是不固定的 length sprintf char number buffer 1 15g d 源代码里用的是 1 15g 代表输出字符最少一位 最大15位
  • 【技术方案】springboot全局异常处理方式

    springboot全局异常处理方式 springboot全局异常有两种处理方式 第一种方案 继承DefaultErrorAttributes类 重写getErrorAttributes方法 代码如下 Slf4j RestControlle
  • SyntaxError: missing ) after argument list

    消息 语法错误 参数列表后面缺少 错误类型 SyntaxError 什么地方出错了 有一个函数在调用时出现错误 这可能是一个错误 丢失运算符或者转义字符等 示例 因为没有使用 操作符来连接字符串 JavaScript 认为 log 函数的参
  • Java 解析http返回的xml数据

    Java 解析http返回的xml数据 写成txt文件 需求 每小时抓取给定api接口返回的xml数据 把xml数据保存为XML文件 把xml数据转换txt文件格式数据 保存txt文件 文件名以yyyyMMddHH0000 txt和yyyy