产品
解决方案
文档与社区
权益中心
定价
云市场
合作伙伴
支持与服务
了解阿里云
AI 助理
备案
控制台
开发者社区
首页
探索云世界
探索云世界
云上快速入门,热门云上应用快速查找
了解更多
问产品
动手实践
官方博客
考认证
TIANCHI大赛
活动广场
活动广场
丰富的线上&线下活动,深入探索云世界
任务中心
做任务,得社区积分和周边
高校计划
让每位学生受益于普惠算力
训练营
资深技术专家手把手带教
话题
畅聊无限,分享你的技术见解
开发者评测
最真实的开发者用云体验
乘风者计划
让创作激发创新
阿里云MVP
遇见技术追梦人
直播
技术交流,直击现场
下载
下载
海量开发者使用工具、手册,免费下载
镜像站
极速、全面、稳定、安全的开源镜像
技术资料
开发手册、白皮书、案例集等实战精华
插件
为开发者定制的Chrome浏览器插件
探索云世界
新手上云
云上应用构建
云上数据管理
云上探索人工智能
云计算
弹性计算
无影
存储
网络
倚天
云原生
容器
serverless
中间件
微服务
可观测
消息队列
数据库
关系型数据库
NoSQL数据库
数据仓库
数据管理工具
PolarDB开源
向量数据库
热门
百炼大模型
Modelscope模型即服务
弹性计算
云原生
数据库
云效DevOps
龙蜥操作系统
平头哥
钉钉开放平台
物联网
大数据
大数据计算
实时数仓Hologres
实时计算Flink
E-MapReduce
DataWorks
Elasticsearch
机器学习平台PAI
智能搜索推荐
人工智能
机器学习平台PAI
视觉智能开放平台
智能语音交互
自然语言处理
多模态模型
pythonsdk
通用模型
开发与运维
云效DevOps
钉钉宜搭
支持服务
镜像站
码上公益
开发者社区
开发与运维
文章
正文
解析.Net框架下的XML编程技术 (转载)
2017-11-26
950
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和 《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:
一.前言:
XML是微软.Net战略的一个重要组成部分,而且它可谓是XML Web服务的基石,所以掌握.Net框架下的XML技术自然显得非常重要了。本文将指导大家如何运用C#语言完成.Net框架下的XML文档的读写操作。首先,我会向大家介绍.Net框架中与XML相关的命名空间和其中的重要类。其次,我还会给出有关的实例以使读者更进一步的了解XML文档的读写操作的具体方法。
二.XML命名空间和相关类简介:
在深入进行.Net框架下的XML文档的操作之前,我想很有必要向大家介绍.Net框架中与XML技术有关的命名空间和其中一些重要的类。.Net框架为我们提供了以下一些命名空间:System.Xml、System.Xml.Schema、System.Xml.Serialization、System.Xml.Xpath以及 System.Xml.Xsl来包容和XML操作相关的类。
- System.Xml命名空间包含了一些最重要的XML类,其中最主要的类是和XML文档的读写操作相关的类。这些类中包括4个与读相关的类以及2个与写相关的类。它们分别是:XmlReader、XmlTextReader、XmlValidatingReader、XmlNodeReader、XmlWriter以及 XmlTextWriter。本文将重点介绍这些类,因为它们是最基本也是最重要的类。
- XmlReader类是一个虚基类,它包含了读XML文档的方法和属性。该类中的Read方法是一个基本的读XML文档的方法,它以流形式读取XML文档中的节点(Node)。另外,该类还提供了ReadString、ReadInnerXml、ReadOuterXml和ReadStartElement等更高级的读方法。除了提供读XML文档的方法外,XmlReader类还为程序员提供了MoveToAttribute、MoveToFirstAttribute、MoveToContent、MoveToFirstContent、MoveToElement以及 MoveToNextAttribute等具有导航功能的方法。在本文后面介绍的实例中,我们将运用到这些方法。
- XmlTextReader、XmlNodeReader以及XmlValidatingReader等类是从XmlReader类继承过来的子类。根据它们的名称,我们可以知道其作用分别是读取文本内容、读取节点和读取XML模式(Schemas)。
- XmlWriter类为程序员提供了许多写XML文档的方法,它是XmlTextWriter类的基类,我在后面的实例中会给出相关的运用方法。
- XmlNode类是一个非常重要的类,它代表了XML文档中的某个节点。该节点可以是XML文档的根节点,这样它就代表整个XML文档了。它是许多很有用的类的基类,这些类包括插入节点的类、删除节点的类、替换节点的类以及在XML文档中完成导航功能的类。同时,XmlNode类还为程序员提供了获取双亲节点、子节点、最后一个子节点、节点名称以及节点类型等的属性。它的三个最主要的子类包括:XmlDocument、XmlDataDocument以及XmlDocumentFragment。XmlDocument类代表了一个XML文档,它提供了载入和保存XML文档的方法和属性。这些方法包括了Load、LoadXml和Save等。同时,它还提供了添加特性(Attributes)、说明(Comments)、空间(Spaces)、元素(Elements)和新节点(New Nodes)等XML项的功能。XmlDocumentFragment类代表了一部分XML文档,它能被用来添加到其他的XML文档中。XmlDataDocument类可以让程序员更好地完成和ADO.NET中的数据集对象之间的互操作。
除了上面介绍的System.Xml命名空间中的类外,该命名空间还包括了XmlConvert、XmlLinkedNode以及XmlNodeList等类,不过这些类不是本文介绍的重点,有兴趣的读者不妨去参考相关文档资料。
System.Xml.Schema命名空间中包含了和XML模式相关的类,这些类包括XmlSchema、XmlSchemaAll、XmlSchemaXPath以及XmlSchemaType等类。
System.Xml.Serialization命名空间中包含了和XML文档的序列化和反序列化操作相关的类,XML文档的序列化操作能将XML格式的数据转化为流格式的数据并能在网络中传输,而反序列化则完成相反的操作,即将流格式的数据还原成XML格式的数据。
System.Xml.XPath命名空间包含了XPathDocument、XPathExression、XPathNavigator以及XPathNodeIterator等类,这些类能完成XML文档的导航功能。在XPathDocument类的协助下,XPathNavigator类能完成快速的XML文档导航功能,该类为程序员提供了许多Move方法以完成导航功能。System.Xml.Xsl命名空间中的类完成了XSLT的转换功能。
三.读XML文档的方法:
在介绍完.Net框架中和XML有关的命名空间和相关类后,我接着向大家介绍和XML相关的一些操作。首先,我向大家介绍的读取XML文档的方法。在下面的实例程序中,我将运用VS.net开发工具附带的"books.xml"文件来作为示例。你可以在你的机器上搜索到该文件(或请参考附录),或者你也可以运用其他的XML文件。
首先,我们用XmlTextReader类的对象来读取该XML文档。方法很简单,就是在创建新对象的构造函数中指明XML文件的位置即可。
XmlTextReader textReader =
new
XmlTextReader("C:\\books.xml");
一旦新对象创建完毕,你就可以调用其Read方法来读取XML文档了。调用Read方法之后,信息被存储起来,你可以通过读取该对象的Name、BaseURI、Depth、LineNumber等属性来获取这些信息。下面我给出一个完整的实例,该实例通过简单的读取"books.xml"文件,然后将其中的信息显示在控制台中。
using
System;
using
System.Xml;
namespace
ReadXml
{
class
Class1
{
static
void
Main(
string
[] args )
{
//
创建一个XmlTextReader类的对象并调用Read方法来读取文件
XmlTextReader textReader =
new
XmlTextReader("C:\\books.xml");
textReader.Read();
//
节点非空则执行循环体
while
( textReader.Read() )
{
//
读取第一个元素
textReader.MoveToElement();
Console.WriteLine("XmlTextReader Properties Test");
Console.WriteLine("===================");
//
读取该元素的属性并显示在控制台中
Console.WriteLine("Name:" + textReader.Name);
Console.WriteLine("Base URI:" + textReader.BaseURI);
Console.WriteLine("Local Name:" + textReader.LocalName);
Console.WriteLine("Attribute Count:" + textReader.AttributeCount.ToString());
Console.WriteLine("Depth:" + textReader.Depth.ToString());
Console.WriteLine("Line Number:" + textReader.LineNumber.ToString());
Console.WriteLine("Node Type:" + textReader.NodeType.ToString());
Console.WriteLine("Attribute Count:" + textReader.Value.ToString());
}
}
}
}
XmlTextReader类中有一个很重要的属性-NodeType,通过该属性,我们可以知道其节点的节点类型。而枚举类型XmlNodeType中包含了诸如Attribute、CDATA、Element、Comment、Document、DocumentType、Entity、ProcessInstruction以及WhiteSpace等的XML项的类型。通过与XmlNodeType中的元素的比较,我们可以获取相应节点的节点类型并对其完成相关的操作。下面我就给出一个实例,该实例读取每个节点的NodeType,并根据其节点类型显示其中的内容,同时程序还记录了XML文件中每种节点类型的数目。
using
System;
using
System.Xml;
namespace
ReadXML
{
class
Class2
{
static
void
Main(
string
[] args )
{
int
ws = 0;
int
pi = 0;
int
dc = 0;
int
cc = 0;
int
ac = 0;
int
et = 0;
int
el = 0;
int
xd = 0;
XmlTextReader textReader =
new
XmlTextReader("C:\\books.xml");
while
(textReader.Read())
{
XmlNodeType nType = textReader.NodeType;
//
节点类型为XmlDeclaration
if
(nType == XmlNodeType.XmlDeclaration)
{
Console.WriteLine("Declaration:" + textReader.Name.ToString());
xd = xd + 1;
}
//
节点类型为Comment
if
( nType == XmlNodeType.Comment)
{
Console.WriteLine("Comment:" + textReader.Name.ToString());
cc = cc + 1;
}
//
节点类型为Attribute
if
( nType == XmlNodeType.Attribute)
{
Console.WriteLine("Attribute:" + textReader.Name.ToString());
ac = ac + 1;
}
//
节点类型为Element
if
( nType == XmlNodeType.Element)
{
Console.WriteLine("Element:" + textReader.Name.ToString());
el = el + 1;
}
//
节点类型为Entity
if
( nType == XmlNodeType.Entity )
{
Console.WriteLine("Entity:" + textReader.Name.ToString());
et = et + 1;
}
//
节点类型为Process Instruction
if
( nType == XmlNodeType. ProcessInstruction )
{
Console.WriteLine("Process Instruction:" + textReader.Name.ToString());
pi = pi + 1;
}
//
节点类型为DocumentType
if
( nType == XmlNodeType.DocumentType)
{
Console.WriteLine("DocumentType:" + textReader.Name.ToString());
dc = dc + 1;
}
//
节点类型为Whitespace
if
( nType == XmlNodeType.Whitespace )
{
Console.WriteLine("WhiteSpace:" + textReader.Name.ToString());
ws = ws + 1;
}
}
//
在控制台中显示每种类型的数目
Console.WriteLine("Total Comments:" + cc.ToString());
Console.WriteLine("Total Attributes:" + ac.ToString());
Console.WriteLine("Total Elements:" + el.ToString());
Console.WriteLine("Total Entity:" + et.ToString());
Console.WriteLine("Total Process Instructions:" + pi.ToString());
Console.WriteLine("Total Declaration:" + xd.ToString());
Console.WriteLine("Total DocumentType:" + dc.ToString());
Console.WriteLine("Total WhiteSpaces:" + ws.ToString());
}
}
}
以上,我向大家介绍了如何运用XmlTextReader类的对象来读取XML文档,并根据节点的NodeType属性来取得其节点类型信息。同时XmlReader这个基类还有XmlNodeReader和XmlValidatingReader等派生类,它们分别是用来读取XML文档的节点和模式的。限于篇幅,这里就不介绍了,读者可以参考有关资料。
四.写XML文档的方法:
XmlWriter类包含了写XML文档所需的方法和属性,它是XmlTextWriter类和XmlNodeWriter类的基类。该类包含了WriteNode、WriteString、WriteAttributes、WriteStartElement以及WriteEndElement等一系列写XML文档的方法,其中有些方法是成对出现的。比如你要写入一个元素,你首先得调用WriteStartElement方法,接着写入实际内容,最后是调用WriteEndElement方法以表示结束。该类还包含了WriteState、XmlLang和XmlSpace等属性,其中WriteState属性表明了写的状态。因为XmlWriter类包含了很多写XML文档的方法,所以这里只是介绍最主要的几种。下面我们通过其子类XmlTextWriter类来说明如何写XML文档。
首先,我们要创建一个XmlTextWriter类的实例对象。该类的构造函数XmlTextWriter有三种重载形式,其参数分别为一个字符串、一个流对象和一个TextWriter对象。这里我们运用字符串的参数形式,该字符串就指明了所要创建的XML文件的位置,方法如下:
XmlTextWriter textWriter = New XmlTextWriter("C:\\myXmFile.xml",
null
);
在创建完对象后,我们调用WriterStartDocument方法开始写XML文档,在完成写工作后,就调用WriteEndDocument结束写过程并调用Close方法将它关闭。在写的过程中,我们可以调用WriteComment方法来添加说明,通过调用WriteString方法来添加一个字符串,通过调用WriteStartElement和WriteEndElement方法对来添加一个元素,通过调用WriteStartAttribute和WriteEndAttribute方法对来添加一个属性。我们还可以通过调用WriteNode方法来添加整一个节点,其它的写的方法还包括WriteProcessingInstruction和WriteDocType等等。下面的实例就是介绍如何具体运用这些方法来完成XML文档的写工作的。
using
System;
using
System.Xml;
namespace
WriteXML
{
class
Class1
{
static
void
Main(
string
[] args )
{
//
创建XmlTextWriter类的实例对象
XmlTextWriter textWriter =
new
XmlTextWriter("C:\\myXmFile.xml",
null
);
//
开始写过程,调用WriteStartDocument方法
textWriter.WriteStartDocument();
//
写入说明
textWriter.WriteComment("First Comment XmlTextWriter Sample Example");
textWriter.WriteComment("myXmlFile.xml in root dir");
//
写入一个元素
textWriter.WriteStartElement("Name", "");
textWriter.WriteString("Student");
textWriter.WriteEndElement();
//
再写入一个元素
textWriter.WriteStartElement("Address", "");
textWriter.WriteString("Colony");
textWriter.WriteEndElement();
//
写入字符
char
[] ch =
new
char
[3];
ch[0] = 'a';
ch[1] = 'r';
ch[2] = 'c';
textWriter.WriteStartElement("Char");
textWriter.WriteChars(ch, 0, ch.Length);
textWriter.WriteEndElement();
//
写文档结束,调用WriteEndDocument方法
textWriter.WriteEndDocument();
//
关闭textWriter
textWriter.Close();
}
}
}
五.运用XmlDocument类:
XmlDocument类的对象代表了一个XML文档,它也是一个非常重要的XML类。该类包含了Load、LoadXml以及Save等重要的方法。其中Load方法可以从一个字符串指定的XML文件或是一个流对象、一个TextReader对象、一个XmlReader对象导入XML数据。LoadXml方法则完成从一个特定的XML文件导入XML数据的功能。它的Save方法则将XML数据保存到一个XML文件中或是一个流对象、一个TextWriter对象、一个XmlWriter对象中。
下面的程序中我们用到了XmlDocument类对象的LoadXml方法,它从一个XML文档段中读取XML数据并调用其Save方法将数据保存在一个文件中。
//
创建一个XmlDocument类的对象
XmlDocument doc =
new
XmlDocument();
doc.LoadXml(("<Student type='regular' Section='B'><Name>Tommy Lex</Name></Student>"));
//
保存到文件中
doc.Save("C:\\student.xml");
这里,我们还可以通过改变Save方法中参数,将XML数据显示在控制台中,方法如下:
doc.Save(Console.Out);
而在下面的程序中,我们用到了一个XmlTextReader对象,通过它我们读取"books.xml"文件中的XML数据。然后创建一个XmlDocument对象并载入XmlTextReader对象,这样XML数据就被读到XmlDocument对象中了。最后,通过该对象的Save方法将XML数据显示在控制台中。
XmlDocument doc =
new
XmlDocument();
//
创建一个XmlTextReader对象,读取XML数据
XmlTextReader reader =
new
XmlTextReader("c:\\books.xml");
reader.Read();
//
载入XmlTextReader类的对象
doc.Load(reader);
//
将XML数据显示在控制台中
doc.Save(Console.Out);
六.总结:
XML技术作为.Net的基石,其重要性自然不言而喻。.Net框架包含了五个命名空间和大量的类来支持与XML技术有关的操作。其中System.Xml是最重要的一个命名空间,其中的XmlReader类和XmlWriter类以及它们的派生类完成了XML文档的读写操作,是最基本也是最重要的类。XmlDocument类代表了XML文档,它能完成与整个XML文档相关的各类操作,同时和其相关的XmlDataDocument类也是非常重要的,值得读者的深入研究。
附录:"books.xml"文件如下:
<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database -->
<bookstore>
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<first-name>Sidas</first-name>
<last-name>Plato</last-name>
</author>
<price>9.99</price>
</book>
</bookstore>
本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2007/07/18/822126.html,如需转载请自行联系原作者
文章标签:
云数据库 ClickHouse
云解析DNS
数据格式
XML
程序员
C#
开发工具
存储
关键词:
XML解析
.NET技术
云解析DNS技术
云解析DNS框架
云解析DNS编程
老朱教授
目录
相关文章
游客44yag4ft7nckq
|
4天前
|
XML
Web App开发
JavaScript
XML DOM 解析器
大多数浏览器内置XML解析器,将XML转化为JavaScript可访问的XML DOM对象。XML DOM提供遍历、访问、插入和删除节点的功能。文档须先加载至DOM。示例代码通过XMLHTTP请求加载`books.xml`,兼容多种浏览器,响应设置为XML DOM用于后续处理。
游客44yag4ft7nckq
12
2
2
游客44yag4ft7nckq
|
4天前
|
XML
Web App开发
JavaScript
XML DOM 解析器
**XML DOM解析器将XML转换为JS对象,便于操作。浏览器内置XML解析器,通过XMLHttpRequest或ActiveXObject加载XML如"books.xml"。
游客44yag4ft7nckq
11
2
2
历年考试不作弊
|
6天前
|
机器学习/深度学习
自然语言处理
深入解析深度学习中的正则化技术
【7月更文挑战第21天】深度学习模型在追求高精度的同时,也面临着过拟合的风险。本文将探讨如何通过正则化技术来平衡模型复杂度与泛化能力,包括L1与L2正则化、Dropout、数据增强和早停等策略。我们将分析这些方法的工作原理及其在实际问题中的应用效果,并讨论如何选择合适的正则化技术以优化深度学习模型的性能。
历年考试不作弊
18
2
2
1941623231718325
|
7天前
|
JavaScript
前端开发
搜索推荐
服务器端渲染技术SSR与ISR:深入解析与应用
【7月更文挑战第20天】服务器端渲染(SSR)和增量静态再生(ISR)作为现代Web开发中的两种重要渲染技术,各有其独特的优势和适用场景。在实际应用中,开发者应根据具体需求和条件选择合适的渲染模式。无论是追求极致的页面加载速度和SEO优化,还是实现内容的实时更新,SSR和ISR都能提供有效的解决方案。通过深入理解这些技术的工作原理和应用场景,开发者可以构建出更加高效、可靠和用户体验优异的Web应用。
1941623231718325
21
2
2
1941623231718325
|
7天前
|
监控
负载均衡
安全
微服务架构下的服务发现与注册:技术深度解析
【7月更文挑战第20天】服务发现与注册是微服务架构中不可或缺的一部分,它确保了服务间的动态发现和通信。通过选择合适的实现工具和遵循最佳实践,可以构建出高效、可靠、可扩展的微服务系统。随着技术的不断进步,未来我们还将看到更多创新的服务发现与注册解决方案的出现。
1941623231718325
19
2
2
1941623231718325
|
7天前
|
存储
JSON
安全
OAuth2与JWT在API安全中的角色:技术深度解析
【7月更文挑战第20天】OAuth2和JWT作为两种重要的安全协议,在API安全中发挥着不可或缺的作用。OAuth2通过提供灵活的授权框架,实现了对资源的细粒度访问控制;而JWT则通过其紧凑性和自包含性,确保了身份验证和信息传输的安全性。在实际应用中,将OAuth2和JWT结合使用,可以构建出既强大又安全的API服务,为用户提供更加安全、可靠和便捷的数字体验。
1941623231718325
23
1
1
游客44yag4ft7nckq
|
2天前
|
XML
Web App开发
JavaScript
XML DOM 解析器
Most browsers have a built-in XML parser to create an XML DOM object from XML, making it accessible via JavaScript. The XML DOM includes methods for navigating, accessing, inserting, and deleting nodes in the XML tree.
游客44yag4ft7nckq
6
0
0
aliyun7689123603-22772
|
5天前
|
运维
Kubernetes
Docker
容器化技术解析:Docker与Kubernetes的协同应用
7月更文挑战第20天
aliyun7689123603-22772
41
0
0
梦回故国楼台梦
|
6天前
|
中间件
数据库
开发者
解析Python Web框架的四大支柱:模板、ORM、中间件与路由
【7月更文挑战第20天】Python Web框架如Django、Flask、FastAPI的核心包括模板(如Django的DTL和Flask的Jinja2)、ORM(Django的内置ORM与Flask的SQLAlchemy)、中间件(Django的全局中间件与Flask的装饰器实现)和路由(Django的urls.py配置与Flask的@app.route()装饰器)。这些组件提升了代码组织和数据库操作的便捷性,确保了Web应用的稳定性和可扩展性。
梦回故国楼台梦
17
0
0
亚丁号
|
2月前
|
开发框架
前端开发
.NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
亚丁号
118
0
0
热门文章
最新文章
1
Xml文件并发读写的解决方法
2
XML教程、语法手册、数据读取方式大全
3
hibernate笔记--实体类映射文件"*.hbm.xml"详解
4
Flex xml编辑器(老外写的)
5
Jsp web.xml 标准配置测试版
6
对于Office Open XML文档格式,请发表您的看法
7
XML和JSON 序列化以及DataTable转JSON
8
Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化
9
用xml模块方式导出多种offcie文件
10
FLEX程序设计--XML(1)
1
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
121
2
Serverless 应用引擎产品使用之阿里云函数计算中添加自定义域名进行域名DNS验证如何解决
49
3
每天解析一个shell脚本(82)
25
4
【专栏】理解并优化DNS设置对于提高网络速度至关重要
488
5
每天解析一个shell脚本(68)
20
6
AngularJS的$http服务:深入解析与进行HTTP请求的技术实践
50
7
DHCP 服务器配置解析:打造高效易用的网络IP地址自动分配系统
141
8
十六进制转换全解析:通往二进制和十进制的桥梁
50
9
精通网络枢纽:全面解析路由器与路由的奥秘
42
10
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用
155
相关课程
更多
云计算工程师解析与实战-网络专家篇(体验版)
深入解析Docker容器化技术
XML入门
Java面试疑难点解析 - 面试技巧及语言基础
Java面试疑难点解析 - Java Web开发
Java面试疑难点解析 - 系统架构及项目设计
相关电子书
更多
神龙云服务器产品及技术深度解析
弹性创造价值:基于ECS的最佳性价比实践解析
又快又稳:阿里云下一代虚拟交换机解析
相关实验场景
更多
通过云拨测对指定服务器进行Ping/DNS监测
搭建Java Web开发环境
推荐镜像
更多
DNS
NTP
kali-security
下一篇
通义千问API入门教程