【Java 进阶篇】Java XML解析:从入门到精通

news2024/12/26 15:05:27

在这里插入图片描述

XML(可扩展标记语言)是一种常用的数据格式,用于存储和交换数据。在Java中,XML解析是一项重要的任务,它允许您从XML文档中提取和操作数据。本篇博客将从基础开始,详细介绍如何在Java中解析XML文档,包括DOM解析、SAX解析和StAX解析。无论您是XML的新手还是有一些经验的开发者,都能在本文中找到有关Java XML解析的有用信息。

为什么需要XML解析?

XML解析是将XML文档转换为应用程序可以理解和操作的数据的过程。它在许多应用程序中都具有关键作用,包括:

  • 数据交换:XML通常用于不同系统之间的数据交换,解析XML可将接收的数据转化为应用程序可以使用的格式。

  • 配置文件:XML通常用于存储应用程序的配置信息,解析XML可读取配置并将其应用到应用程序中。

  • Web服务:许多Web服务使用XML来传递数据,解析XML可用于访问和操作Web服务的响应数据。

  • 日志文件:某些应用程序将日志数据存储为XML,解析XML可用于分析和提取有关应用程序性能和行为的信息。

XML基础

在开始学习XML解析之前,让我们先了解XML的基础知识。

1. XML文档结构

XML文档由标签(element)、属性(attribute)、文本内容和注释组成。一个简单的XML文档包括以下部分:

<person age="30">
    <name>John</name>
    <address>
        <city>New York</city>
        <zip>10001</zip>
    </address>
</person>
  • <person> 是一个元素,带有一个名为 age 的属性和子元素 nameaddress
  • <name><address> 也是元素,分别包含文本内容。
  • age<person> 元素的属性。

2. XML解析模型

Java中有几种用于XML解析的模型,主要包括DOM、SAX和StAX。

  • DOM(文档对象模型):DOM解析将整个XML文档加载到内存中,形成一个树状结构,允许您轻松地遍历和操作XML数据。DOM解析适用于小型XML文档,但可能在处理大型文档时占用大量内存。

  • SAX(简单API for XML):SAX解析是事件驱动的,逐行读取XML文档,触发事件来处理元素和数据。SAX解析适用于大型XML文档,因为它不需要将整个文档加载到内存中。

  • StAX(流API for XML):StAX解析是一种双向解析模型,允许您以类似流的方式读取和写入XML数据。它是一种高性能的解析模型,适用于大型文档。

使用DOM解析XML

DOM解析是一种将整个XML文档加载到内存中并构建树状结构的解析方式。它允许您轻松地遍历和操作XML数据。

示例:解析XML文档

让我们通过一个示例来演示如何使用DOM解析XML文档。我们将解析以下XML文档:

<employees>
    <employee>
        <name>John</name>
        <position>Manager</position>
    </employee>
    <employee>
        <name>Alice</name>
        <position>Engineer</position>
    </employee>
</employees>
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;

public class DOMParserExample {
    public static void main(String[] args) {
        try {
            // 创建一个DocumentBuilder
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            // 解析XML文件
            Document document = builder.parse(new File("employees.xml"));

            // 获取根元素
            Element root = document.getDocumentElement();

            // 获取所有employee元素
            NodeList employeeList = root.getElementsByTagName("employee");

            for (int i = 0; i < employeeList.getLength(); i++) {
                Element employee = (Element) employeeList.item(i);

                // 获取name元素的文本内容
                String name = employee.getElementsByTagName("name").item(0).getTextContent();

                // 获取position元素的文本内容
                String position = employee.getElementsByTagName("position").item(0).getTextContent();

                System.out.println("Employee Name: " + name);
                System.out.println("Position: " + position);
                System.out.println("---------------");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述示例中,我们使用DocumentBuilderFactory创建一个DocumentBuilder,然后使用builder.parse()方法解析XML文件。接下来,我们获取根元素employees,并遍历所有employee元素,提取nameposition元素的文本内容。

示例:创建XML文档

DOM解析还允许您创建XML文档。以下是一个示例,演示如何使用DOM创建XML文档:

import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;

public class DOMCreateExample {
    public static void main(String[] args) {
        try {
            // 创建一个DocumentBuilder
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            // 创建一个新文档
            Document document = builder.newDocument();

            // 创建根元素
            Element employees = document.createElement("employees");
            document.appendChild(employees);

            // 创建第一个employee元素
            Element employee1 = document.createElement("employee");
            employees.appendChild(employee1);

            Element name1 = document.createElement("name");
            name1.appendChild(document.createTextNode("John"));
            employee1.appendChild(name1);

            Element position1 = document.createElement("position");
            position1.appendChild(document.createTextNode("Manager"));
            employee1.appendChild(position1);

            // 创建第二个employee元素
            Element employee2 = document.createElement("employee");
            employees.appendChild(employee2);

            Element name2 = document.createElement("name");
            name2.appendChild(document.createTextNode("Alice"));
            employee2.appendChild(name2);

            Element position2 = document.createElement("position");
            position2.appendChild(document.createTextNode("Engineer"));
            employee2.appendChild(position2);

            // 将文档写入文件
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(document);
            StreamResult result = new StreamResult(new File("new_employees.xml"));
            transformer.transform(source, result);

            System.out.println("XML文档创建成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述示例中,我们创建了一个新的Document对象,并使用createElement方法创建元素。然后,我们将元素添加到文档中,最后使用Transformer将文档写入文件。这将创建一个新的XML文档。

使用SAX解析XML

SAX解析是一种基于事件的解析模型,逐行读取XML文档并触发事件来处理元素和数据。相比DOM,SAX解析不需要将整个文档加载到内存中,因此适用于大型XML文档。

示例:解析XML文档

让我们通过一个示例来演示如何使用SAX解析XML文档:

import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import java.io.*;

public class SAXParserExample {
    public static void main(String[] args) {
        try {
            // 创建一个SAXParser
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();

            // 创建一个处理器
            DefaultHandler handler = new DefaultHandler() {
                private boolean inEmployee = false;
                private String name = null;
                private String position = null;

                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                    if (qName.equalsIgnoreCase("employee")) {
                        inEmployee = true;
                    }
                }

                public void endElement(String uri, String localName, String qName) throws SAXException {
                    if (qName.equalsIgnoreCase("employee")) {
                        inEmployee = false;
                        System.out.println("Employee Name: " + name);
                        System.out.println("Position: " + position);
                        System.out.println("---------------");
                    }
                }

                public void characters(char[] ch, int start, int length) throws SAXException {
                    if (inEmployee) {
                        String data = new String(ch, start, length);
                        if (name == null) {
                            name = data;
                        } else {
                            position = data;
                        }
                    }
                }
            };

            // 解析XML文件
            parser.parse(new File("employees.xml"), handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述示例中,我们创建了一个SAXParser和一个事件处理器DefaultHandler。事件处理器在遇到元素的开始和结束以及字符数据时触发事件。我们实现了startElementendElementcharacters方法,以处理相应的事件。

示例:使用SAX解析器工厂

SAX解析也可以使用解析器工厂来创建解析器。以下是一个示例:

import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.*;

public class SAXParserFactoryExample {
    public static void main(String[] args) {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();

            DefaultHandler handler = new DefaultHandler() {
                // 与前面的示例相同
            };

            parser.parse(new File("employees.xml"), handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个示例与之前的示例相似,但它使用了解析器工厂来创建SAX解析器。

使用StAX解析XML

StAX解析是一种基于流的解析模型,允许您以类似流的方式逐行读取和写入XML数据。StAX解析是一种高性能的解析模型,适用于大型XML文档。

示例:解析XML文档

让我们通过一个示例来演示如何使用StAX解析XML文档:

import javax.xml.stream.*;
import java.io.*;

public class StAXParserExample {
    public static void main(String[] args) {
        try {
            XMLInputFactory factory = XMLInputFactory.newInstance();
            XMLStreamReader reader = factory.createXMLStreamReader(new FileInputStream("employees.xml"));

            String currentElement = "";
            String name = "";
            String position = "";

            while (reader.hasNext()) {
                int event = reader.next();

                switch (event) {
                    case XMLStreamConstants.START_ELEMENT:
                        currentElement = reader.getLocalName();
                        break;

                    case XMLStreamConstants.CHARACTERS:
                        String data = reader.getText();
                        if ("name".equals(currentElement)) {
                            name = data;
                        } else if ("position".equals(currentElement)) {
                            position = data;
                        }
                        break;

                    case XMLStreamConstants.END_ELEMENT:
                        if ("employee".equals(reader.getLocalName())) {
                            System.out.println("Employee Name: " + name);
                            System.out.println("Position: " + position);
                            System.out.println("---------------");
                        }
                        break;
                }
            }

            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述示例中,我们使用XMLInputFactory创建一个XMLStreamReader,然后使用while循环逐行读取XML文档中的数据。我们跟踪当前元素的名称,并根据当前元素的内容提取nameposition的值。最后,我们在遇到</employee>元素时打印员工信息。

示例:使用StAX写入XML

StAX不仅可以用于解析XML,还可以用于创建XML文档。以下是一个示例,演示如何使用StAX创建XML文档:

import javax.xml.stream.*;
import java.io.*;

public class StAXCreateExample {
    public static void main(String[] args) {
        try {
            XMLOutputFactory factory = XMLOutputFactory.newInstance();
            XMLStreamWriter writer = factory.createXMLStreamWriter(new FileWriter("new_employees.xml"));

            writer.writeStartDocument();
            writer.writeStartElement("employees");

            // 创建第一个employee元素
            writer.writeStartElement("employee");
            writer.writeStartElement("name");
            writer.writeCharacters("John");
            writer.writeEndElement();
            writer.writeStartElement("position");
            writer.writeCharacters("Manager");
            writer.writeEndElement();
            writer.writeEndElement();

            // 创建第二个employee元素
            writer.writeStartElement("employee");
            writer.writeStartElement("name");
            writer.writeCharacters("Alice");
            writer.writeEndElement();
            writer.writeStartElement("position");
            writer.writeCharacters("Engineer");
            writer.writeEndElement();
            writer.writeEndElement();

            writer.writeEndElement();
            writer.writeEndDocument();

            writer.close();

            System.out.println("XML文档创建成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在上述示例中,我们使用XMLOutputFactory创建一个XMLStreamWriter,然后使用write方法逐步创建XML文档。我们首先写入文档声明,然后创建根元素employees,并添加两个employee元素,每个元素都包含nameposition元素。

选择合适的解析方法

在选择XML解析方法时,需要考虑以下因素:

  • 内存消耗:DOM解析通常需要将整个文档加载到内存中,可能导致内存消耗过大。SAX和StAX解析逐行读取文档,内存消耗较低。

  • 性能:SAX和StAX解析通常比DOM解析更快,尤其是在处理大型文档时。

  • 复杂性:DOM解析通常更容易编写,因为它允许您轻松地遍历和操作文档。SAX和StAX解析更复杂,因为您需要编写事件处理器来处理元素和数据。

  • 灵活性:如果您需要读取和写入XML,StAX解析是一种更灵活的选择,因为它支持双向操作。

根据您的具体需求,选择合适的解析方法非常重要。如果您需要处理小型文档并且希望方便地操作数据,DOM解析可能是不错的选择。如果您需要处理大型文档或需要更高的性能,SAX或StAX解析可能更适合。

XML解析库

Java提供了许多XML解析库,用于简化XML解析的过程。一些常见的XML解析库包括:

  • JDOM:JDOM是一种用于解析和操作XML的流行库,提供了简单的API。

  • DOM4J:DOM4J是一个基于DOM的XML解析库,具有强大的功能和性能。

  • Jsoup:Jsoup是一种用于解析HTML和XML的库,通常用于Web抓取和数据提取。

  • Jackson:Jackson是一个处理JSON的库,但也可以用于处理XML。

这些库提供了不同的功能和性能特点,您可以根据自己的需求选择最合适的库。

使用XML Schema验证

除了解析XML,还可以使用XML Schema(XSD)来验证XML文档的有效性。XML Schema定义了XML文档的结构和数据类型,可以确保文档符合规定的结构。

以下是一个使用XSD验证XML的示例:

import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.SAXException;
import java.io.File;
import java.io.IOException;

public class XsdValidatorExample {
    public static void main(String[] args) {
        try {
            String xmlFile = "employees.xml";
            String xsdFile = "employees.xsd";

            SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Schema schema = factory.newSchema(new File(xsdFile));
            Validator validator = schema.newValidator();

            Source source = new StreamSource(new File(xmlFile));
            validator.validate(source);

            System.out.println("XML验证通过!");
        } catch (SAXException | IOException e) {
            System.out.println("XML验证错误: " + e.getMessage());
        }
    }
}

在上述示例中,我们使用SchemaFactory创建一个Schema对象,该对象包含了我们之前定义的XSD约束。然后,我们使用Validator来验证XML文档。如果XML文档不符合XSD的约束,将抛出相应的错误。

实际应用示例

让我们来看一个实际的应用示例:使用XML解析来处理Web服务的响应。假设您正在开发一个应用程序,通过调用Web服务来获取数据。 Web服务通常以XML形式返回数据,您可以使用XML解析来提取和处理Web服务的响应。

import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class WebServiceExample {
    public static void main(String[] args) {
        // 假设这是Web服务的响应XML
        String responseXml = "<data><item>Item 1</item><item>Item 2</item></data>";

        try {
            // 创建一个DocumentBuilder
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();

            // 解析Web服务的响应XML
            Document document = builder.parse(new InputSource(new StringReader(responseXml)));

            // 获取根元素
            Node root = document.getDocumentElement();

            // 获取所有item元素
            NodeList itemList = root.getChildNodes();

            for (int i = 0; i < itemList.getLength(); i++) {
                Node itemNode = itemList.item(i);

                if (itemNode.getNodeType() == Node.ELEMENT_NODE) {
                    String item = itemNode.getTextContent();
                    System.out.println("Item: " + item);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们模拟了Web服务的响应XML,并使用DOM解析来提取item元素的文本内容。这可以在实际应用程序中用于处理Web服务的响应数据,提取所需的信息。

总结

本博客详细介绍了Java中的XML解析,包括DOM、SAX和StAX三种解析模型。您可以根据项目的需求选择最合适的解析方式。此外,我们还了解了如何使用XML Schema验证XML文档的有效性,以及一些常见的XML解析库。

XML解析是Java开发中常见的任务,它允许您与其他系统交换数据,读取和写入配置文件,访问Web服务的响应数据等。熟练掌握XML解析是Java开发中的一项重要技能。

希望本博客对您有所帮助,如果您有任何问题或需要进一步的指导,请随时提问。祝您在Java XML解析的学习和应用中取得成功!

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

进程中的权限是如何操作的

任何一个进程都有父进程。所以&#xff0c;整个进程其实就是一棵进程树。而拥有同一父进程的所有进程都具有兄弟关系。 struct task_struct __rcu *real_parent; /* real parent process */ struct task_struct __rcu *parent; /* recipient of SIGCHLD, wait4() reports */ s…

超市商品管理系统 JAVA语言设计实现

目录 一、系统介绍 二、系统下载 三、系统截图 一、系统介绍 基于VueSpringBootMySQL的超市商品管理系统&#xff0c;超市区域模块、超市货架模块、商品类型模块、商品档案模块&#xff0c;分为用户网页端和管理后台&#xff0c;基于角色的访问控制&#xff0c;可将权限精确…

c++ qt连接操作sqlite

qt连接操作sqlite qt客户端编程,用到数据库的场景不多,但是部分项目还是需要数据库来保存同步数据,客户端用到的数据库,一般是sqlite。 Qt提供了数据库模块,但是qt本身的数据库模块并不好用,会有各种问题, 建议大家不要,可以自己封装数据库的操作。本篇博客介绍qt连接操…

AVS3:双向光流BIO

AVS3引入了双向光流&#xff08;BI-directional Optical flow,BIO&#xff09;技术&#xff0c;和H.266/VVC中的BDOF类似&#xff0c;BIO用于解决基于块的预测会存在块内某些区域仍会有偏差的现象导致需要划分更小的块。通过补偿小的像素区域的位移&#xff0c;BIO可以使用更大…

Leetcode刷题详解——最小覆盖子串

1. 题目链接&#xff1a;76. 最小覆盖子串 2. 题目描述&#xff1a; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xf…

VSCode 自动格式化

1.打开应用商店&#xff0c;搜索 prettier code formatter &#xff0c;选择第一个&#xff0c;点击安装。 2.安装完成后&#xff0c;点击文件&#xff0c;选择首选项&#xff0c;选择设置。 3.在搜索框内输入 save &#xff0c;勾选在保存时格式化文件。 4.随便打开一个文件&a…

FineReport制作任务日历

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 博主接触FineReport帆软报表有一段时间了&#xff0c;正好前几天做了一个任务日历的需求&#xff0c;把每天完成的任务量直观的展示在日历上&#xff0c;方便管理者更好的监控各业务的完成情况&#xff0c;做完后想着…

蜣螂优化(DBO)求解置换流水车间调度问题(PFSP)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

gin 框架出现runtime error: index out of range [0] with length 0

之前是这样的&#xff1a; category : c.Request.Form["type"][0] 加上这一句就变成了 fmt.Println(c.Request.FormFile("type")) category : c.Request.Form["type"][0]

你所瞧不上的东西正以另外一种方式kill you

简单的例子就是&#xff1a; 360se & 360ee的份额比你想象中的大. 360se浏览器&#xff0c;安全浏览器 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 Safari/537.36 360ee浏览器&#xff0c;极速浏览器 n…

摄像头工程师说 Camera-如何控制摄像头的输出尺寸(分辨率)

计算机视觉 Camera-如何控制摄像头的输出尺寸&#xff08;分辨率&#xff09; 摄像头工程师说 Camera-如何控制摄像头的输出尺寸&#xff08;分辨率&#xff09;windowingCroppingSkip/SubsampleScaleBinning总结 摄像头工程师说 Camera-如何控制摄像头的输出尺寸&#xff08;分…

Google Chrome的新“IP保护”功能将隐藏用户的IP地址

导语&#xff1a;在保护用户隐私方面&#xff0c;Google Chrome正在测试一项名为“IP保护”的新功能。通过使用代理服务器掩盖用户的IP地址&#xff0c;这项功能能够增强用户的隐私保护。在意识到IP地址可能被用于秘密追踪后&#xff0c;Google希望在确保用户隐私的同时&#x…

《 汇编语言的系统学习》一、编程语言、机器语言与汇编语言

目录 《 汇编语言的系统学习》1、编程语言1.1 语言1.2 程序 2 编程语言分类2.1 机器语言2.2 汇编语言2.3 高级程序语言2.3.1 编译型2.3.1 解释型 《 汇编语言的系统学习》 1、编程语言 1.1 语言 定义&#xff1a;一种系统的&#xff0c;人与人之间通过声音、符号等进行交流的…

Qwt-QwtPlot类详解

1.概述 QwtPlot类是Qwt库中最重要的类之一&#xff0c;用于创建和管理绘图窗口。 QwtPlot类具有以下主要功能&#xff1a; 提供一个绘图窗口&#xff0c;可以在其中绘制简单或复杂的二维数据图。支持多种类型的图表&#xff0c;包括曲线图、柱状图、散点图等。能够自定义图表…

第一章: LangChain 生成与加载知识库并根据匹配内容回答问题

LangChain——让文本大模型更加智能化系列文章目录 第一章 langchain生成与加载向量库并根据匹配内容回答问题 文章目录 LangChain——让文本大模型更加智能化系列文章目录前言文章简介一、使用步骤1.引入库2.LLM加载3.数据加载4.数据切分与转换向量5.构建prompt5.查询知识库并…

进程的优先级与LAMP项目部署实战

一、进程的优先级&#xff08;扩展&#xff09; 1、什么是进程的优先级 Linux是一个多用户、多任务的操作系统&#xff0c;系统中通常运行着非常多的进程。哪些进程先运行&#xff0c;哪些进程后运行&#xff0c;就由进程优先级来控制 思考&#xff1a;什么时候需要用到进程…

线性表操作的实现--顺序表

本文参考朱战力老师的数据结构与算法--使用C语言一书 文章目录 前言 一、线性表是什么&#xff1f; 二、具体实现 1.顺序表的定义 2.初始化ListInitiate&#xff08;L&#xff09; 3.求当前元素个数ListLength&#xff08;L&#xff09; 4.插入元素ListInsert&#xff08;L&…

js 导出文字到txt文件

简介&#xff1a; js 导出文字到txt文件 效果展示&#xff1a; 代码示例&#xff1a; /*** 导出文字到txt文件* param filename* param text*/ function exportToTxt(filename, text) {if (filename undefined) {filename "example-";}if (text undefined) {tex…

【IDEA配置】IDEA配置

参考视频&#xff1a;【idea必知必会】优化设置 告别卡顿 1. 显示内存 右击底下空白区域&#xff0c;出现memory indicator内存指示器&#xff0c;点击勾选即可显示。有的是在Settings->Appearance->Window Options里&#xff0c;如图所示&#xff1a; 2. 内存设置 …

傻瓜式调用阿里云的接口进行三要素(姓名、手机号和身份证号)校验

傻瓜式调用阿里云的接口进行三要素&#xff08;姓名、手机号和身份证号&#xff09;校验 一、准备1、购买阿里云的三要素核验套餐包2、申请开通三要素一致性核验3、查看AccessKey 二、调用三要素核验接口1、查看接口文档2、查看阿里云的调用示例3、阿里云完整示例代码4、改造后…