01-XML-04XML处理

XML处理

  1. DOM
    DOM解析要求解析器将整个XML文件全部加载到内存中,生成一个Document对象。

    优点:元素和元素之间保留结构,关系,可以针对元素进行增删改查操作。

    缺点:如果XML文件过大,可能会导致内存溢出。
  2. SAX
    SAX解析是一种更加高效的解析方式。它是逐行扫描,边扫描边解析,并且以时间驱动的方式进行具体的解析,每解析一行都会触发一个事件。

    优点:不会出现内存溢出的问题,可以处理大文件。

    缺点:只能读,不能写。
  3. 常见的解析XML类库
    解析器就是根据不同的解析方式提供具体的实现,为了方便开发人员来解析XML,有一些方便操作的类库。具体如下所示:

    1.dom4j:比较简单的XML解析类库;

    2.Jsoup:功能强大的DOM方式解析的类库,尤其对HTML的解析更加方便,所以可以使用Jsoup来爬取网页的数据。

JDK内置DOM

XML文件

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <!-- book至少出现一次 -->
    <book>
        <!-- id -->
        <id>1</id>
        <!-- 书名 -->
        <name>《JAVA从入门到放弃》</name>
        <!-- 作者
            属性type:可选(man|woman)默认值 “man”
            属性age:必填属性
             -->
        <author type="man" age="23">张三</author>
    </book>
    <book>
        <id>2</id>
        <name>《这是一本书》</name>
        <author type="woman" age="32">李四</author>
    </book>
</books>

JDK内置DOM读XML

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;

/**
 * JDK内置DOM读XML
 *
 * @author Anna.
 * @date 2024/3/31 17:42
 */
public class JavaDomReadDemo {

    public static void main(String[] args) throws Exception {
        new JavaDomReadDemo().read();
    }

    public void read() throws ParserConfigurationException, IOException, SAXException {
        // 获取资源路径
        String path = this.getClass().getResource("books.xml").getPath();
        // 获取文件判断文件是否存在
        File file = new File(path);
        if (!file.exists() || !file.isFile()) {
            throw new RuntimeException("获取资源失败");
        }

        // 从DocumentBuilderFactory获得DocumentBuilder。 DocumentBuilder包含用于从 XML 文档中获取 DOM 文档实例的 API。
        DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        // parse()方法将 XML 文件解析为Document
        Document doc = documentBuilder.parse(file);

        System.out.printf("根节点: %s", doc.getDocumentElement().getNodeName());

        // 循环打印
        NodeList nList = doc.getElementsByTagName("book");

        for (int i = 0; i < nList.getLength(); i++) {
            Node nNode = nList.item(i);
            System.out.println("");
            System.out.printf("元素: %s", nNode.getNodeName());
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element elem = (Element) nNode;
                String id = elem.getElementsByTagName("id").item(0).getTextContent();
                String name = elem.getElementsByTagName("name").item(0).getTextContent();
                Element authorNode = (Element) elem.getElementsByTagName("author").item(0);
                String author = elem.getElementsByTagName("author").item(0).getTextContent();
                String type = authorNode.getAttribute("type");
                String age = authorNode.getAttribute("age");
                System.out.println("");
                System.out.printf("id: %s - name:%s - author:%s[type=%s,age=%s]", id, name, author, type, age);
            }
        }
    }

}

执行结果

在这里插入图片描述

使用NodeIterator读取文本

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.traversal.DocumentTraversal;
import org.w3c.dom.traversal.NodeFilter;
import org.w3c.dom.traversal.NodeIterator;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;

/**
 * JDK内置DOM读XML
 * 使用NodeIterator读取文本
 *
 * @author Anna.
 * @date 2024/3/31 17:42
 */
public class JavaDomReadDemo2 {

    public static void main(String[] args) throws Exception {
        new JavaDomReadDemo2().read();
    }

    public void read() throws ParserConfigurationException, IOException, SAXException {
        // 获取资源路径
        String path = this.getClass().getResource("books.xml").getPath();
        // 获取文件判断文件是否存在
        File file = new File(path);
        if (!file.exists() || !file.isFile()) {
            throw new RuntimeException("获取资源失败");
        }

        // 从DocumentBuilderFactory获得DocumentBuilder。 DocumentBuilder包含用于从 XML 文档中获取 DOM 文档实例的 API。
        DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        // parse()方法将 XML 文件解析为Document
        Document doc = documentBuilder.parse(file);

        DocumentTraversal trav = (DocumentTraversal) doc;

        NodeIterator it = trav.createNodeIterator(doc.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, true);

        for (Node node = it.nextNode(); node != null;
             node = it.nextNode()) {
            // 判断是否有属性
            if (node.hasAttributes()) {
                String attrStr = getAttrStr(node.getAttributes());
                System.out.printf("元素名称:%s-元素值:%s-属性:%s %n", node.getNodeName(), node.getTextContent(), "".equalsIgnoreCase(attrStr) ? "null" : attrStr, node.getNodeType());
            } else {
                System.out.printf("元素名称:%s-元素值:%s%n", node.getNodeName(), node.getTextContent());
            }
        }
    }

    private String getAttrStr(NamedNodeMap attributes) {
        StringBuffer sb = new StringBuffer();
        if (attributes != null && attributes.getLength() > 0) {
            sb.append("[");
            for (int i = 0; i < attributes.getLength(); i++) {
                Node item = attributes.item(i);
                sb.append(item.getNodeName()).append("=").append(item.getNodeValue()).append(" ");
            }
            sb.append("]");
        }
        return sb.toString();
    }
}

执行结果

在这里插入图片描述

使用NodeIterator读取文本自定义NodeFilter

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.traversal.DocumentTraversal;
import org.w3c.dom.traversal.NodeFilter;
import org.w3c.dom.traversal.NodeIterator;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;

/**
 * JDK内置DOM读XML
 * 使用NodeIterator读取文本自定义NodeFilter
 * @author Anna.
 * @date 2024/3/31 17:42
 */
public class JavaDomReadDemo3 {

    public static void main(String[] args) throws Exception {
        new JavaDomReadDemo3().read();
    }

    public void read() throws ParserConfigurationException, IOException, SAXException {
        // 获取资源路径
        String path = this.getClass().getResource("books.xml").getPath();
        // 获取文件判断文件是否存在
        File file = new File(path);
        if (!file.exists() || !file.isFile()) {
            throw new RuntimeException("获取资源失败");
        }

        // 从DocumentBuilderFactory获得DocumentBuilder。 DocumentBuilder包含用于从 XML 文档中获取 DOM 文档实例的 API。
        DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        // parse()方法将 XML 文件解析为Document
        Document doc = documentBuilder.parse(file);

        DocumentTraversal trav = (DocumentTraversal) doc;

        NodeIterator it = trav.createNodeIterator(doc.getDocumentElement(), NodeFilter.SHOW_ELEMENT, new MyFilter(), true);

        for (Node node = it.nextNode(); node != null;
            node = it.nextNode()) {
            // 判断是否有属性
            if(node.hasAttributes()){
                String attrStr = getAttrStr(node.getAttributes());
                System.out.printf("元素名称:%s-元素值:%s-属性:%s %n", node.getNodeName(),node.getTextContent(),"".equalsIgnoreCase(attrStr) ? "null" : attrStr, node.getNodeType());
            }
            else {
                System.out.printf("元素名称:%s-元素值:%s%n", node.getNodeName(),node.getTextContent());
            }
        }
    }

    private String getAttrStr(NamedNodeMap attributes){
        StringBuffer sb = new StringBuffer();
        if(attributes != null && attributes.getLength() > 0){
            sb.append("[");
            for(int i = 0; i < attributes.getLength(); i++){
                Node item = attributes.item(i);
                sb.append(item.getNodeName()).append("=").append(item.getNodeValue()).append(" ");
            }
            sb.append("]");
        }
        return sb.toString();
    }

    /**
     * 自定义过滤器
     *  实现NodeFilter接口
     *  通过返回NodeFilter.FILTER_ACCEPT和NodeFilter.FILTER_REJECT来控制要使用的节点
     * @author Anna.
     * @date 2024/3/31 18:50
     */
    static class MyFilter implements NodeFilter {
        @Override
        public short acceptNode(Node thisNode) {
            if (thisNode.getNodeType() == Node.ELEMENT_NODE) {
                Element e = (Element) thisNode;
                String nodeName = e.getNodeName();
                if ("author".equals(nodeName)) {
                    return NodeFilter.FILTER_ACCEPT;
                }
            }
            return NodeFilter.FILTER_REJECT;
        }
    }
}

执行结果

在这里插入图片描述

JDK内置DOM写XML

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * JDK内置DOM写XML
 *
 * @author Anna.
 * @date 2024/3/31 17:42
 */
public class JavaDomWriteDemo {

    public static void main(String[] args) throws Exception {
        new JavaDomWriteDemo().write();
    }

    public void write() throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.newDocument();

        // 创建根节点
        Element root = doc.createElementNS("", "books");
        doc.appendChild(root);
        // 设置子元素
        Map<String, String> book1 = new HashMap<String, String>();
        book1.put("type", "man");
        book1.put("age", "34");
        root.appendChild(createBook(doc, "1", "《JAVA从入门到放弃》", "张三", book1));
        Map<String, String> book2 = new HashMap<String, String>();
        book2.put("type", "man");
        book2.put("age", "34");
        root.appendChild(createBook(doc, "2", "《这是一本书》", "李四", book2));

        // Java DOM 使用Transformer生成 XML 文件。 之所以称为转换器,是因为它也可以使用 XSLT 语言转换文档。
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transf = transformerFactory.newTransformer();

        // 设置文档的编码和缩进
        transf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transf.setOutputProperty(OutputKeys.INDENT, "yes");
        transf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");

        // DOMSource保存 DOM 树
        DOMSource source = new DOMSource(doc);
        // 获取资源路径
        String path = System.getProperty("user.dir") + File.separator + "01-xml-04-xml-handle/java-dom-demo/src/main/resources";
        File myFile = new File(path + File.separator + "books2.xml");

        StreamResult console = new StreamResult(System.out);
        StreamResult file = new StreamResult(myFile);

        // 写入控制台和文件
        transf.transform(source, console);
        transf.transform(source, file);
    }

    /**
     * 创建Book
     * e
     *
     * @param doc
     * @param id
     * @param name
     * @param author
     * @return org.w3c.dom.Node
     * @author Anna.
     * @date 2024/3/31 19:03
     */
    private static Node createBook(Document doc, String id, String name, String author, Map<String, String> attrsMap) {
        Element book = doc.createElement("book");
        book.setAttribute("id", id);
        book.appendChild(createUserElement(doc, "id", id, null));
        book.appendChild(createUserElement(doc, "name", name, null));
        book.appendChild(createUserElement(doc, "author", author, attrsMap));
        return book;
    }

    /**
     * 创建子节点
     *
     * @param doc
     * @param name
     * @param value
     * @param attrsMap
     * @return org.w3c.dom.Node
     * @author Anna.
     * @date 2024/3/31 19:02
     */
    private static Node createUserElement(Document doc, String name, String value, Map<String, String> attrsMap) {
        Element node = doc.createElement(name);
        node.appendChild(doc.createTextNode(value));

        if (attrsMap != null && attrsMap.size() > 0) {
            for (Map.Entry entry : attrsMap.entrySet()) {
                node.setAttribute(entry.getKey().toString(), entry.getValue().toString());
            }
        }

        return node;
    }
}

执行结果

在这里插入图片描述

DOM4J读写XML

引入MAVEN坐标

<dependency>
   <groupId>org.dom4j</groupId>
   <artifactId>dom4j</artifactId>
   <version>2.1.3</version>
</dependency>

SAX读XML

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.Iterator;

/**
 * SAX读XML文件
 *
 * @author Anna.
 * @date 2024/3/31 19:40
 */
public class SaxReadDemo {

    public static void main(String[] args) {
        new SaxReadDemo().read();
    }

    public void read() {
        // 获取资源路径
        String path = this.getClass().getResource("books.xml").getPath();
        // 获取文件判断文件是否存在
        File file = new File(path);
        if (!file.exists() || !file.isFile()) {
            throw new RuntimeException("获取资源失败");
        }

        // 1 创建SAXReader对象,用于读取XML文件
        SAXReader saxReader = new SAXReader();
        // 读取XML文件,得到document对象
        try {
            Document document = saxReader.read(new File(path));
            // 获取根元素
            Element rootElement = document.getRootElement();
            System.out.println("根元素名称:" + rootElement.getName());
            // 获取根元素下所有子元素
            Iterator<?> iterator = rootElement.elementIterator();
            while (iterator.hasNext()) {
                // 取出元素
                Element element = (Element) iterator.next();
                System.out.println("子元素名称:" + element.getName());
                // 获取子元素
                Element id = element.element("id");
                Element name = element.element("name");
                Element author = element.element("author");

                System.out.printf("子元素的子元素值-id:%s -name: %s --author:%s[type=%s,age=%s]%n",
                        id.getStringValue(), name.getText(),
                        author.getText(),
                        // 获取author属性type
                        author.attribute("type").getValue(),
                        // 获取author属性age
                        author.attribute("age").getValue());
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

执行结果

在这里插入图片描述

DOM4J写XML

Dom4j的常用API说明

方法操作
Element getRootElement();获取XML文件的根节点
String getName();返回标签的名称
List < Element > elements();获取标签所有的子标签
String arrtributeVallue(String name) ;获取指定属性名称的属性值
String getText();获取标签的文本
String elementText(String name);获取指定名称的子标签的文本,返回子标签文本的值
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

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

/**
 * Dom4j写XML文件
 *
 * @author Anna.
 * @date 2024/3/31 19:40
 */
public class Dom4jWriteDemo {

    public static void main(String[] args) {
        String path = System.getProperty("user.dir") + File.separator + "01-xml-04-xml-handle/dom4j-demo/src/main/resources";
        new Dom4jWriteDemo().write(path + File.separator + "books2.xml");
    }

    public void write(String path) {
        // 通过documentHelper生成一个Documen对象
        Document document = DocumentHelper.createDocument();
        // 添加并得到根元素
        Element books = document.addElement("books");
        // 为根元素添加子元素
        Element book = books.addElement("book");
        // 为book添加子元素
        Element id = book.addElement("id");
        Element name = book.addElement("name");
        Element author = book.addElement("author");
        // 为子元素添加文本
        id.addText("1");
        name.addText("《Java自学基础》");
        author.addText("张三");
        author.addAttribute("type", "man");
        author.addAttribute("age", "12");
        // 将DOC输出到XML文件 简单输出
//        Writer writer = null;
//        try {
//            writer = new FileWriter(new File(path));
//            document.write(writer);
//            // 关闭资源
//            writer.close();
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            if (writer != null) {
//                try {
//                    writer.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
        // 美化格式输出
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = null;
        try {
            xmlWriter = new XMLWriter(new FileWriter(new File(path)), format);
            xmlWriter.write(document);
            // 关闭资源
            xmlWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (xmlWriter != null) {
                try {
                    xmlWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

执行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/506113.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】寿司线程池{单例模式之懒汉模式下的线程池}

文章目录 回顾单例模式0.多线程下的单例模式的意义1.什么是单例模式1.0设计模式1.1C单例模式的介绍及原理1.2拷贝构造和赋值重载的处理1.3if (nullptr ptr)&#xff0c;nullptr放在比较运算符的前面?1.4实现单例模式的方式 2.实现懒汉方式的单例模式2.1单线程的单例模式2.2多…

Go 源码之 gin 框架

Go 源码之 gin 框架 go源码之gin - Jxy 博客 一、总结 gin.New()初始化一个实例&#xff1a;gin.engine&#xff0c;该实例实现了http.Handler接口。实现了ServeHTTP方法 注册路由、注册中间件&#xff0c;调用addRoute将路由和中间件注册到 methodTree 前缀树&#xff08;节…

AR-Net网络(图像篡改检测)

AR-Net网络 摘要AbstractAR-Net1. 文献摘要2. 研究背景3. 创新点4. AR-Net 网络架构5. 实验6. 结论总结 摘要 AR-Net使用自适应注意力机制来融合位置和通道维度的特征&#xff0c;使网络能够充分利用不同维度的被篡改特征&#xff0c;此外&#xff0c;AR-Net 改进了预测掩模&a…

【Web and HTTP,HTTP概况,HTTP连接,持久HTTP,用户-服务器状态:cookie】

文章目录 Web and HTTPHTTP概况HTTP:超文本传输协议使用TCP&#xff1a;HTTP是无状态的 HTTP连接非持久HTTP持久HTTP响应时间模型 持久HTTP非持久HTTP的缺点&#xff1a;持久HTTP提交表单输入 用户-服务器状态&#xff1a;cookie Web and HTTP Web页&#xff1a;由一些对象组成…

智慧校园管理系统

一、项目介绍 1.1 项目简介 智慧校园管理系统&#xff1a;主要是以年级、班级为单位&#xff0c;进行老师和学生信息记录和统计功能。项目采用前后端分离架构思想&#xff0c;前端采用HTMLCSSVUE来实现页面效果展示&#xff0c;后端采用SpringBootMybatisPlus框架实现数据存储…

v3-admin-vite 改造自动路由,view页面自解释Meta

需求 v3-admin-vite是一款不错的后端管理模板&#xff0c;主要是pany一直都在维护&#xff0c;最近将后台管理也进行了升级&#xff0c;顺便完成一直没时间解决的小痛痒&#xff1a; 在不使用后端动态管理的情况下。我不希望单独维护一份路由定义&#xff0c;我希望页面是自解…

鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题

鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题 一、运行环境 1、硬件 手机型号&#xff1a;NOVA 7 系统&#xff1a;HarmonyOS版本 4.0.0 2、软件 android SDK platforms&#xff1a;14.0(API Level 34)、13.0&#xff08;API Level 33&#xff09; SDK Build-T…

【踩坑】荣耀系统Android8.0 system目录Read-only file system

本来以为直接把Charles证书改成系统证书格式&#xff0c;然后通过mt管理器root之后移动到系统证书目录就行了&#xff0c;结果访问baidu仍然显示网络错误&#xff0c;折腾一晚上。后来直接安装为用户证书&#xff0c;与系统证书冲突。 手机型号&#xff1a;荣耀v10 EMUI&…

win10 安装kubectl,配置config连接k8s集群

安装kubectl 按照官方文档安装&#xff1a;https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/ curl安装 &#xff08;1&#xff09;下载curl安装压缩包: curl for Windows &#xff08;2&#xff09;配置环境变量&#xff1a; 用户变量&#xff1a; Path变…

牛客NC92 最长公共子序列(二)【中等 动态规划 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11 思路 https://blog.csdn.net/qq_36544411/article/details/120021203 思路 动态规划法&#xff0c; 我们以dp[i][j]表示在s1中以第i个元素结尾&#xff0c;s2中以第j个元素结…

CCF-CSP26<2022-06>-第1/2/3题

202206-1 归一化处理 题目&#xff1a;202206-1 题目分析&#xff1a; 给出了数学上归一化的数学公式&#xff0c;直接按照要求完成即可。 AC代码&#xff1a; #include <bits/stdc.h> using namespace std; int main() {int n;cin >> n;double a[n];double s…

开关恒流源简介

目录 工作原理 设计要点 应用场景 初步想法&#xff0c;为参加活动先占贴&#xff08;带家人出去玩没时间搞~~&#xff09;&#xff0c;后面优化 开关恒流源是一种基于开关电源技术的恒流输出电源设备。它采用开关管进行高速的开关动作&#xff0c;通过控制开关管的导通和截…

【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统概述

系列文章目录 【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统介绍 文章目录 系列文章目录[TOC](文章目录) 前言一、Linux 概述1.1、GNU 与自由软件1.2、Linux是什么1.3、Linux 特色1.4、Linux的优缺点1.4.1、Linux 优点1.4.2、Linux 缺点 二、虚拟机介绍2.1…

数据结构与算法 顺序栈的基本运算

一、实验内容 编写一个程序sqstack.cpp&#xff0c;实现顺序栈的各种基本运算&#xff0c;并在此基础上写一个程序exp6.cpp,实现以下功能 初始化栈s判断栈是否为空依次进栈元素a,b,c,d,e判断栈是否为空输出出栈序列判断栈是否为空释放栈 二、实验步骤 1、sqstack.cpp 2、ex…

6.5物联网RK3399项目开发实录-驱动开发之LCD显示屏使用(wulianjishu666)

90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】 链接&#xff1a;https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwdc53f LCD使用 简介 AIO-3399J开发板外置了两个LCD屏接口&#xff0c;一个是EDP&#xff0c;一个是LVDS&#xff0c;接口对应板…

go: go.mod file not found in current directory or any parent directory.如何解决?

这个错误表明你正在执行 go get 命令&#xff0c;但是当前目录或任何父目录中都找不到 go.mod 文件。这可能是因为你的项目还没有使用 Go Modules 进行管理。 要解决这个问题&#xff0c;有几种方法&#xff1a; go mod init <module-name> 其中 <module-name>…

CentOS系统下Docker的安装教程

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

oracle+110个常用函数

ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2. CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr…

C语言-malloc(申请函数)free(释放函数)

malloc和free的语法格式 malloc 函数是 C 语言标准库中的一个重要函数&#xff0c;用于动态分配内存。其语法如下&#xff1a; void *malloc(size_t size);这里的 void * 表示返回的是一个 void 类型的指针&#xff0c;实际上这个指针指向的是一个 char 类型的内存块。size_t …

R语言决策树(1)

数据集heart_learning.csv与heart_test.csv是关于心脏病的数据集&#xff0c;heart_learning.csv是训练数据集&#xff0c;heart_test.csv是测试数据集。要求&#xff1a;target和target2为因变量&#xff0c;其他诸变量为自变量。用决策树模型对target和target2做预测&#xf…