XML解析(DOM4j)检索(Xpath)

news2024/11/15 22:51:45

XML在以后更多的是用来作为配置文件的。

一. 配置文件

什么是配置文件

  • 用来保存程序在运行时需要的一些参数。

  •  当配置信息比较复杂的时候,我们就可以用XML。

 二. XML概述

 三. XML的创建、语法规则

 

  • 根标签就是写在最外面的标签。 

<?xml version="1.0" encoding="UTF-8" ?>
<student>
<!--    下面表示第一个学生的信息-->
    <studnet id = "1">
        <name>1&lt;2</name>
        <age><![CDATA[<<<<<<  >>>>>>  &&&& '''' """"]]></age>
    </studnet>
</student>

 四. XML文档约束

  • XML文件可以作为软件的配置文件,软件刚开始运行的时候第一步要去读取并解析XML文件里面的内容,所以XML文件的编写方式要按照软件规定的格式 / 要求来进行书写,否则软件无法解析!
  • 软件所规定的要求 / 格式专业用语就叫文档约束。约束本身也是一个文件。

4.1 XML文档约束方式一-DTD约束[了解]

 

  

4.2 XML文档约束方式二-schema约束[了解]

 

 

  • 什么是复杂的标签?就是标签里面还可以有标签。
  • sequence表示这个里面所有的标签必须按照顺序来书写。

简单的引入方式: 

 复杂的引入方式:

 五. XML解析技术

5.1 XML解析技术概述

在我们的XML文件当中,不管是删除还是添加,都要通过它的父节点,也就是父元素去操作。

  • DOM的缺点在我们现在的硬件当中可以是忽略不计的,因为现在我们的内存都非常地大。

  • 在我们整个XML文件当中,所有的内容都可以认为是节点。 

5.2 Dom4J解析XML文件

5.3 Dom4J解析XML文件中的各种节点 

Dom4J获取文档对象并解析XML:

<?xml version="1.0" encoding="UTF-8" ?>
<persons>

    <person id = "1">
        <name>zhangsan</name>
        <age>23</age>
    </person>

    <person id = "2">
        <name>lisi</name>
        <age>24</age>
    </person>

    <person id = "3">
        <name>wangwu</name>
        <age>25</age>
    </person>

    <a></a>

</persons>
package com.dom4j;

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

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Dom4jDemo {
    public static List<Person> list = new ArrayList<>();
    public static void main(String[] args) throws DocumentException {
        // 1.创建解析器对象
        SAXReader saxReader = new SAXReader();

        // 2.利用解析器去读取xml文件,并返回文档对象
        File file = new File("practice-app\\src\\com\\dom4j\\person.xml");
        Document document = saxReader.read(file);

        // 拿到了document表示我已经拿到了xml文件的整体
        // 3.打印文档对象
        System.out.println("文档对象:" + document);

        // 4.自己解析的时候一定要一层一层的去解析
        // 5.获取根元素 / 根标签对象
        Element rootElement = document.getRootElement();
        System.out.println("根标签对象:" + rootElement);
        String rootElementName = rootElement.getName();
        System.out.println("根标签对象名:" + rootElementName); // 根标签对象名:persons

        // 6.获取当前根标签下所有的子标签
        /*List<Element> elements = rootElement.elements();
        for (Element element : elements) {
            System.out.println(element.getName());
        }*/

        // 7.获取当前根标签下指定名字的子标签返回集合
        List<Element> elements = rootElement.elements("person");
        for (Element element : elements) {
            // 7.继续获取子标签里面的内容
            // 获取指定属性的对象
            Attribute id = element.attribute("id");
            // 获取该属性的属性名
            String idName = id.getName();
            // 获取该属性的文本内容 / 属性值
            String idValue = id.getText();
            System.out.println("子标签名:" + element.getName() + "     属性名:" + idName + "  属性值:" + idValue);

            // name标签
            Element name = element.element("name");
            // 获取name标签的文本内容
            String nameValue = name.getText();
            System.out.println("标签名:" + name.getName() + "  文本内容:" + nameValue);

            // age标签
            Element age = element.element("age");
            // 获取age标签的文本内容
            String ageValue = age.getText();
            System.out.println("标签名:" + age.getName() + "   文本内容:" + ageValue);
            System.out.println(idValue + " , " + nameValue + " , " + ageValue);


            // 创建Person对象
            Person p = new Person(idValue, nameValue, Integer.valueOf(ageValue));
            // 把Person对象添加到集合当中去
            list.add(p);
        }
        // 打印输出list集合
//        System.out.println(list);
        // 使用Stream流的方式进行打印
        list.stream().forEach(s -> System.out.println(s));
    }
}

 

package com.dom4j;

public class Person {
    private String id;
    private String name;
    private int age;


    public Person() {
    }

    public Person(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }


    /**
     * 获取
     * @return id
     */
    public String getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{id = " + id + ", name = " + name + ", age = " + age + "}";
    }
}

5.4 Dom4J解析XML文件-案例实战

 解析XML文件并登录:

<?xml version="1.0" encoding="UTF-8" ?>
<users>
   <user id = "1">
       <username>zhangsan</username>
       <password>123</password>
       <!--身份证号码-->
       <personid>12794372194721124135281</personid>
       <phoneid>12746821789412</phoneid>
       <!--权限,是否为管理员-->
       <admin>true</admin>
   </user>

    <user id = "2">
        <username>lisi</username>
        <password>123</password>
        <personid>127371293472194147410183</personid>
        <phoneid>12269846128941</phoneid>
        <admin>false</admin>
    </user>
</users>
package com.dom4j;

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

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
   Document表示整个文档对象
   Element表示标签 / 元素 / 节点
   Attribute表示属性
   Text表示文本
   Element、Attribute、Text共同的父类:Node(节点)
   每一个标签、属性、文本都可以看作是一个节点
 */
public class Dom4jDemo2 {
    // 创建List集合存储从XML文件当中解析出来的用户对象信息
    public static List<User> list = new ArrayList<>();
    public static void main(String[] args) throws DocumentException {
        // 1.创建一个解析器对象
        SAXReader saxReader = new SAXReader();
        // 2.利用解析器去获取xml文件,获得一个文档对象
        File file = new File("practice-app\\src\\com\\dom4j\\user.xml");
        Document document = saxReader.read(file);
        // 思想:从外面开始一层一层的扒开(脱衣服)
        // 3.获取根标签
        Element rootElement = document.getRootElement();
        System.out.println("根标签名:" + rootElement.getName()); // 根标签名:users
        // 4.进入根标签,获取里面的user标签
        List<Element> elements = rootElement.elements("user");
        System.out.println("user标签个数:" + elements.size()); // user标签个数:2
        // 5.遍历集合得到每一个usre标签
        for (Element element : elements) {
            // 6.获取user标签的属性id
            Attribute id = element.attribute("id");

            // 获取该属性id的属性名
            String idName = id.getName();
            // 获取该属性id的属性值 / 文本内容
           String idValue = id.getText();

            // 获取用户名标签
            Element username = element.element("username");
            // 获取该标签的文本内容
            String usernameValue = username.getText();

            // 获取密码标签
            Element password =  element.element("password");
            // 获取密码标签的文本内容
            String passwordValue = password.getText();

            // 获取personid标签
            Element personid = element.element("personid");
            // 获取该标签的文本内容
            String personidValue = personid.getText();

            // 获取phoneid
            Element phoneid = element.element("phoneid");
            // 获取该标签的文本内容
            String phoneidValue = phoneid.getText();

            // 获取权限admin,是否为管理员
            Element admin = element.element("admin");
            // 获取该标签的文本内容
            String adminValue =  admin.getText();

            // 创建User对象
            User u = new User(usernameValue, passwordValue,
                    personidValue, phoneidValue, Boolean.valueOf(adminValue));
            // 把User对象添加到集合中去
            list.add(u);
        }
        // 利用Stream流打印输出list集合
        list.stream().forEach(s -> System.out.println(s));

        // 登录操作
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = sc.nextLine();
        System.out.println("请输入密码:");
        String password = sc.nextLine();

        // 1.判断用户名是否存在,如果不存在提示用户名未注册
        int index = getIndex(list, username);
        if(index == -1){
            System.out.println("该用户名未注册");
        }else{
            // 表示存在
            User user = list.get(index);
            if(user.getPassword().equals(password)){
                System.out.println("登录成功!");
            }else{
                System.out.println("密码错误,登录失败!");
            }
        }
    }

    /**
     * 查询username在List集合当中的索引
     * @param list:存储User对象的集合
     * @param username:传进来的用户名
     * @return:如果存在返回索引,如果不存在返回-1
     */
    public static int getIndex(List<User> list, String username){
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if(user.getUsername().equals(username)){
                return i;
            }
        }
        return -1;
    }

}

 

 六. XML检索技术:Xpath

Xpath技术可以快速的获取XML文件当中的某一个值

<?xml version="1.0" encoding="UTF-8" ?>
<persons>

    <person id = "1">
         <name>zhangsan</name>
         <age>23</age>
    </person>

    <person id = "2">
        <name>lisi</name>
        <age>24</age>
    </person>

    <person id = "3">
        <name>wangwu</name>
        <age>25</age>
    </person>

</persons>

 1.绝对路径检索

package com.xpath;

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

import java.io.File;

/**
   利用Xpath技术检索XML文件
 */
public class XpathDemo {
    public static void main(String[] args) throws DocumentException {
        // 1.需要创建解析器对象
        SAXReader saxReader = new SAXReader();
        // 2.利用解析器对象去读取本地的xml文件,获得一个文档对象
        File file = new File("practice-app\\src\\com\\xpath\\person.xml");
        Document document = saxReader.read(file);

        // 3.获取到一个文档对象,然后就可以利用xpath方式来进行快速检索
        //   两个方法:
        //      1.检索单个  document.selectSingleNode("路径表达式")
        //      2.检索多个  document.selectNodes("路径表达式")

        // 1.绝对路径检索:从根节点开始逐层的查找
        // 不能写成 \ 符号,\符号在Java当中我们叫做转义字符
        /*List<Node> list =  document.selectNodes("/persons/person/name");
        System.out.println(list.size()); // 3
        for (Node node : list) {
            System.out.println("标签名:" + node.getName() + "  文本内容:" + node.getText());
        }*/
        // 检索单个
        Element element = (Element) document.selectSingleNode("/persons/person/name");
        System.out.println("标签名:" + element.getName() + "    文本内容:" + element.getText());
    }
}

2. 相对路径检索 

package com.xpath;

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

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

/**
   利用Xpath技术检索XML文件
 */
public class XpathDemo2 {
    public static void main(String[] args) throws DocumentException {
        // 1.需要创建解析器对象
        SAXReader saxReader = new SAXReader();
        // 2.利用解析器对象去读取本地的xml文件,获得一个文档对象
        Document document = saxReader.read(new File("practice-app\\src\\com\\xpath\\person.xml"));

        // 3.获取到一个文档对象,然后就可以利用xpath方式来进行快速检索
        //   两个方法:
        //      1.检索单个  document.selectSingleNode("路径表达式")
        //      2.检索多个  document.selectNodes("路径表达式")

        // 利用相对路径进行检索
        // 相对路径它是有一个参照物,参照物:自己本身
        Element rootElement = document.getRootElement();

        // 相对于自己去往下查找
        // 检索单个
//        Element element = (Element) rootElement.selectSingleNode("./person/age");
        // 检索所有
        List<Node> list =  rootElement.selectNodes("./person/age");
        for (Node node : list) {
            System.out.println(node.getText());
        }
//        System.out.println("标签名:" + element.getName() + "   文本内容:" + element.getText());
    }
}

 

3. 全文检索 

package com.xpath;

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

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

/**
   利用Xpath技术检索XML文件
 */
public class XpathDemo3 {
    public static void main(String[] args) throws DocumentException {
        // 1.需要创建解析器对象
        SAXReader saxReader = new SAXReader();
        // 2.利用解析器对象去读取本地的xml文件,获得一个文档对象
        Document document = saxReader.read(new File("practice-app\\src\\com\\xpath\\person.xml"));

        // 3.获取到一个文档对象,然后就可以利用xpath方式来进行快速检索
        //   两个方法:
        //      1.检索单个  document.selectSingleNode("路径表达式")
        //      2.检索多个  document.selectNodes("路径表达式")


        // 总结:
        //     路径里面如果只有一个/表示单级的路径
        //     路径里面如果有//表示,单级的可以,多级的也可以

        // 全文检索
        // 1.//contact	找contact元素,无论元素在哪里
       /* List<Node> list = document.selectNodes("//name");
        System.out.println(list.size()); // 4
        for (Node node : list) {
            System.out.println(node.getText());
        }*/

        // 2.//contact/name	找contact,无论在哪一级,但name一定是contact的子节点
//        List<Node> list =  document.selectNodes("//person/name");
//        for (Node node : list) {
//            System.out.println(node.getName());
//        }

        // 3.//contact//name	contact无论在哪一种,name只要是contact的子孙元素都可以找到
        List<Node> list = document.selectNodes("//person//name");
        System.out.println(list.size());
    }
}

4. 属性检索

 

package com.xpath;

import org.dom4j.*;
import org.dom4j.io.SAXReader;

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

/**
 利用Xpath技术检索XML文件
 */
public class XpathDemo4 {
    public static void main(String[] args) throws DocumentException {
        // 1.需要创建解析器对象
        SAXReader saxReader = new SAXReader();
        // 2.利用解析器对象去读取本地的xml文件,获得一个文档对象
        Document document = saxReader.read(new File("practice-app\\src\\com\\xpath\\person.xml"));

        // 3.获取到一个文档对象,然后就可以利用xpath方式来进行快速检索
        //   两个方法:
        //      1.检索单个  document.selectSingleNode("路径表达式")
        //      2.检索多个  document.selectNodes("路径表达式")

        // 属性查找
        // 查找属性和带属性查找
        // 1.//@属性名:查属性
//        List<Node> list = document.selectNodes("//@id");
//        System.out.println(list.size()); // 3
//        for (Node node : list) {
//            System.out.println(node.getText());
//        }

        // 2.//元素[@属性名]:查的是带有指定属性的标签
        /*List<Node> list = document.selectNodes("//person[@name]");
        System.out.println(list.size()); // 0
        for (Node node : list) {
            System.out.println(node.getText());
        }*/
        List<Node> list1 = document.selectNodes("//person[@id]");
        System.out.println(list1.size());
        for (Node node : list1) {
            // 将父类node节点向下转型为子类Element标签
            Element element = (Element) node;
            // 获取该标签的标签名
            System.out.println(element.getName());
            // 获取该标签的id属性
            Attribute id = element.attribute("id");
            // 获取该标签的属性名以及属性值
            System.out.println("标签名:" + element.getName() + "  属性名:" + id.getName() + "  属性值:" + id.getText());
        }
        System.out.println("===========================================================");
        // 3.//元素[@属性名=‘值’]:查的是带有指定属性和属性值的标签
        List<Node> list2 = document.selectNodes("//person[@id='1']");
        for (Node node : list2) {
            // 将父类node节点向下转型为子类Element标签
            Element element = (Element) node;
            // 获取该标签的标签名
            String elementName = element.getName();
            // 获取该标签的属性
            Attribute id = element.attribute("id");
            // 获取该标签的属性名以及属性值
            String idName = id.getName();
            String idValue = id.getText();
            System.out.println("标签名:" + elementName + "  属性名:" + idName + "  属性值:" + idValue);
        }
    }
}

 

 Xpath的小结:

  1. Xpath底层依赖于dom4j。在刚开始导包的时候一定要把dom4j的jar包一起导入。
  2. 有两个检索的方法:
  • selectNodes("路径"):查询所有
  • selectSingleNode("路径"):查询单个的,如果结果有多个,默认返回第一个。

     3. 四种检索方式:

      / :单级路径

      // :多级路径

      @ 属性

      绝对路径:一定是从根节点开始

      相对路径:从现在的自己节点开始的。

                        用根节点调用selectNodes,那么此时就是相对于根节点而言。

                        用name节点调用selectNodes,那么此时就是相对于name标签而言。

      全文检索:只要xml文件中存在就可以找到

                        //name  在整个xml文件中找name这个标签

                        扩展用法:

                            //person/name:先找person,再找person的子标签name。

                            //person//name:先找person,再找person的子标签name,但是此时                                                                  name可以是孙标签。

      带属性的查询:

                       查属性: //@属性名   在全文中找指定的属性

                       查带有指定属性的标签: //标签名[@属性名]

                       查带有指定属性值的标签://标签名[@属性名= ' 值 ' ]

细节如果说在双引号里面我们还要去引用其他的东西,那么这个时候我们就可以用单引号来引               用。 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity3D小功能】Unity3D中实现Text显示版本功能

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在项目开发中&#xff0c;会遇到要控制版本的情况&#xff0c;…

Python基础篇

大家好&#xff0c;我是易安&#xff01; Python语言比起C、Java等主流语言&#xff0c;语法更简洁&#xff0c;也更接近英语&#xff0c;对编程世界的新人还是很友好的&#xff0c;这也是其显著优点。最近总有人问我Python相关的问题&#xff0c;这些问题也偏基础&#xff0c;…

Qt绘图类

Qt绘图类 QPainter绘图1&#xff0e;QPainter与QPaintDevice2&#xff0e;paintEvent事件和绘图区3&#xff0e;QPainter绘图的主要属性4&#xff0e;创建实例 QPen的主要功能1&#xff0e;线条样式2&#xff0e;线条端点样式3. QBrush的主要功能4. 渐变填充 5 QPainter绘制…

Python小姿势 - Python连接MySQL数据库

Python连接MySQL数据库 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python的创始人为吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;&#xff0c;于1989年底圣诞节期间&#xff0c;为了打发无聊的圣诞节&#xff0c;决心开发一个新的脚本解释程序…

云表无代码开发平台,助力制造业练就数字化转型"硬功"

制造业作为国民经济的基础&#xff0c;也是我国的支柱产业&#xff0c;对我国经济发展具有重要意义。但随着近年来我国制造业转型升级步伐的加快&#xff0c;我国制造业在发展过程中也面临着许多困难和挑战。比如&#xff1a;企业生产设备老化、生产过程自动化程度低、产品质量…

Spark大数据处理讲课笔记3.3 掌握RDD分区

文章目录 零、本讲学习目标一、RRD分区&#xff08;一&#xff09;RDD分区概念&#xff08;二&#xff09;RDD分区作用 二、RDD分区数量&#xff08;一&#xff09;RDD分区原则&#xff08;二&#xff09;影响分区的因素&#xff08;三&#xff09;使用parallelize()方法创建RD…

【计算机视觉】Visual Transformer (ViT)模型结构以及原理解析

文章目录 一、简介二、Vision Transformer如何工作三、ViT模型架构四、ViT工作原理解析4.1 步骤1&#xff1a;将图片转换成patches序列4.2 步骤2&#xff1a;将patches铺平4.3 步骤3&#xff1a;添加Position embedding4.4 步骤4&#xff1a;添加class token4.5 步骤5&#xff…

数字图像处理--matlab图像反转、对数变换、伽马变换、对比度拉伸详解和代码实现

灰度变换在图像的单个像素上操作&#xff0c;主要以对比度和阈值处理为目的 空间滤波涉及改善性能的操作&#xff08;邻域操作&#xff09;&#xff0c;如通过图像中每一个像素的邻域处理来锐化图像 这两种方法均属于图像增强。 灰度变换 邻域基本增强变换定义数学表达三种基本…

QTableWidget表格控件的用法(非常详细)

QTableWidget表格控件的用法&#xff08;非常详细&#xff09; QTableWidget表格控件的用法&#xff08;非常详细&#xff09;QTableWidget详解1.常用API设置自动调整行高和列宽设置表格内容是否可编辑设置行表头、列表头是否显示 2.添加子项3.右键弹出菜单4.设置风格5.清空6.运…

LED灯内常见驱动电路

如今LED灯已成为照明的主流&#xff0c;使用白炽灯的家庭少之又少。其主要优势是LED灯更节能&#xff0c;相同光效的情况下&#xff0c;LED灯消耗的电能要比白炽灯减少70%以上。 LED灯的寿命比白炽灯要长&#xff0c;使用过白炽灯的人都知道&#xff0c;使用不了多长时间&…

简析Linux内核中的各种锁:信号量/互斥锁/读写锁/原子锁/自旋锁/内存屏障等

首先得搞清楚&#xff0c;不同锁的作用对象不同。 下面分别是作用于临界区、CPU、内存、cache 的各种锁的归纳&#xff1a; 一、atomic原子变量/spinlock自旋锁 — —CPU 既然是锁CPU&#xff0c;那就都是针对多核处理器或多CPU处理器。单核的话&#xff0c;只有发生中断会使…

生成C++工程的UML类图和类继承关系图

简介 在进行软件开发时&#xff0c;了解代码结构和关系、类之间的继承关系以及类内部的成员函数和变量定义是非常重要的。为此&#xff0c;我们可以使用Doxygen和Graphviz工具来生成UML类图和类集成关系图。 Doxygen是一个用于从注释的C源代码中生成文档的工具&#xff0c;支…

day01刷题记录

刷题 题目一分析题解 题目二分析题解 题目一 牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。 例如: 一个队伍三个队员的水平值分别是…

access数据库连接sqlserver实现远程连接

由于项目需要对接生产系统&#xff0c;但是生产系统使用的是access数据库&#xff08;这么老还在用&#xff0c;不知道咋想的&#xff09;&#xff0c;客户又想把项目部署到阿里云上&#xff0c;需要阿里云远程连接本地的access数据库&#xff08;心里一句MMP送上&#xff09;&…

Java——线程池详细讲解

文章目录 一、线程池一、线程池基础1.1 什么是线程池1.2 为什么使用线程池1.3 线程池有哪些优势1.4 应用场景 二、线程池使用2.1 Java内置线程池 ThreadPoolExecutor2.1.1 线程池的七个参数2.1.1.1 **int corePoolSize 核心线程数量**2.1.1.2 int maximumPoolSize 最大线程数2.…

假期后,野兔百科系统网站源码新版更新发布

这个是野兔百科系统中文版更新&#xff0c;这次更新了增加几个功能模块&#xff0c;几个已知的问题&#xff0c;修复系统部分功能。 系统名称&#xff1a;野兔百科系统 系统语言&#xff1a;中文版 系统源码&#xff1a;不加密&#xff0c;开源 系统开发&#xff1a;PHPMySQL …

尚融宝29-提现和还款

目录 一、提现 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;前端 &#xff08;三&#xff09;后端 1、提现接口 2、回调接口 二、还款 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;前端 &#xff08;三&#xff09;后端 1、还款接口 …

第一章:概述

1&#xff0c;因特网概述 1.网络、互联网和英特网 网络(Network)由若干结点(Node)和连接这些结点的链路(Link)组成。 多个网络还可以通过路由器互连起来&#xff0c;这样就构成了一个覆盖范围更大的网络&#xff0c;即互联网(或互连网)。因此&#xff0c;互联网是“网络的网络…

UE蓝图基础学习笔记(未完待续2023/05/03)

文章目录 一、项目创建1&#xff09;准备流程&#xff08;选择模板、开发语言、平台、质量等&#xff09;2&#xff09;界面介绍 二、Actor三、操作关卡对象&#xff08;旋转、移动、缩放和坐标轴&#xff09;四、常用快捷键五、运行游戏六、蓝图介绍七、蓝图节点八、操作事件图…

Azure DevOps Server 2022.0.1升级手册

Contents 1. 概述2. 操作方法 2.1 安装操作系统2.2 安装数据库2.4 还原数据2.3 安装和配置Azure DevOps Server 1. 概述 Azure DevOps Server 是微软公司经过20多年的持续开发&#xff0c;逐渐将需求管理、敏捷实践、源代码管理、持续集成等功能集成一体&#xff0c;实现应用软…