C#XmlHelper帮助类操作Xml文档的通用方法汇总
前言
该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法(主要包括Xml序列化和反序列化,Xml文件读取,Xml文档节点内容增删改的一些通过方法)。当然可能还有很多方法会漏了,假如各位同学好的方法可以在文末留言,我会统一收集起来。
C#XML基础入门
Xml反序列化为对象
#region Xml反序列化为对象
/// <summary>
/// Xml反序列化为指定模型对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="xmlContent">Xml内容</param>
/// <param name="isThrowException">是否抛出异常</param>
/// <returns></returns>
public static T XmlConvertToModel<T>(string xmlContent, bool isThrowException = false) where T : class
{
StringReader stringReader = null;
try
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
stringReader = new StringReader(xmlContent);
return (T)xmlSerializer.Deserialize(stringReader);
}
catch (Exception ex)
{
if (isThrowException)
{
throw ex;
}
return null;
}
finally
{
stringReader?.Dispose();
}
}
/// <summary>
/// 读取Xml文件内容反序列化为指定的对象
/// </summary>
/// <param name="filePath">Xml文件的位置(绝对路径)</param>
/// <returns></returns>
public static T DeserializeFromXml<T>(string filePath)
{
try
{
if (!File.Exists(filePath))
throw new ArgumentNullException(filePath + " not Exists");
using (StreamReader reader = new StreamReader(filePath))
{
XmlSerializer xs = new XmlSerializer(typeof(T));
T ret = (T)xs.Deserialize(reader);
return ret;
}
}
catch (Exception ex)
{
return default(T);
}
}
#endregion
对象序列化为Xml
#region 对象序列化为Xml
/// <summary>
/// 对象序列化为Xml
/// </summary>
/// <param name="obj">对象</param>
/// <param name="isThrowException">是否抛出异常</param>
/// <returns></returns>
public static string ObjectSerializerXml<T>(T obj, bool isThrowException = false)
{
if (obj == null)
{
return string.Empty;
}
try
{
using (StringWriter sw = new StringWriter())
{
Type t = obj.GetType();
//强制指定命名空间,覆盖默认的命名空间
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
//在Xml序列化时去除默认命名空间xmlns:xsd和xmlns:xsi
namespaces.Add(string.Empty, string.Empty);
XmlSerializer serializer = new XmlSerializer(obj.GetType());
//序列化时增加namespaces
serializer.Serialize(sw, obj, namespaces);
sw.Close();
string replaceStr = sw.ToString().Replace(@"<?xml version=""1.0"" encoding=""utf-16""?>", "");
return replaceStr;
}
}
catch (Exception ex)
{
if (isThrowException)
{
throw ex;
}
return string.Empty;
}
}
#endregion
Xml字符处理
#region Xml字符处理
/// <summary>
/// 特殊符号转换为转义字符
/// </summary>
/// <param name="xmlStr"></param>
/// <returns></returns>
public string XmlSpecialSymbolConvert(string xmlStr)
{
return xmlStr.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\'", "'").Replace("\"", """);
}
#endregion
创建Xml文档
#region 创建Xml文档
/// <summary>
/// 创建Xml文档
/// </summary>
/// <param name="saveFilePath">文件保存位置</param>
public void CreateXmlDocument(string saveFilePath)
{
XmlDocument xmlDoc = new XmlDocument();
//创建类型声明节点
XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
xmlDoc.AppendChild(node);
//创建Xml根节点
XmlNode root = xmlDoc.CreateElement("books");
xmlDoc.AppendChild(root);
XmlNode root1 = xmlDoc.CreateElement("book");
root.AppendChild(root1);
//创建子节点
CreateNode(xmlDoc, root1, "author", "追逐时光者");
CreateNode(xmlDoc, root1, "title", "XML学习教程");
CreateNode(xmlDoc, root1, "publisher", "时光出版社");
//将文件保存到指定位置
xmlDoc.Save(saveFilePath/*"D://xmlSampleCreateFile.xml"*/);
}
/// <summary>
/// 创建节点
/// </summary>
/// <param name="xmlDoc">xml文档</param>
/// <param name="parentNode">Xml父节点</param>
/// <param name="name">节点名</param>
/// <param name="value">节点值</param>
///
public void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value)
{
//创建对应Xml节点元素
XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);
node.InnerText = value;
parentNode.AppendChild(node);
}
#endregion
Xml数据读取
#region Xml数据读取
/// <summary>
/// 读取Xml指定节点中的数据
/// </summary>
/// <param name="filePath">Xml文档路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">读取数据的属性名</param>
/// <returns>string</returns>
/**************************************************
* 使用示列:
* XmlHelper.XmlReadNodeAttributeValue(path, "/books/book", "author")
************************************************/
public static string XmlReadNodeAttributeValue(string filePath, string node, string attribute)
{
string value = "";
try
{
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlNode xmlNode = doc.SelectSingleNode(node);
value = (attribute.Equals("") ? xmlNode.InnerText : xmlNode.Attributes[attribute].Value);
}
catch { }
return value;
}
/// <summary>
/// 获得xml文件中指定节点的节点数据
/// </summary>
/// <param name="filePath">Xml文档路径</param>
/// <param name="nodeName">节点名</param>
/// <returns></returns>
public static string GetNodeInfoByNodeName(string filePath, string nodeName)
{
string XmlString = string.Empty;
XmlDocument xml = new XmlDocument();
xml.Load(filePath);
XmlElement root = xml.DocumentElement;
XmlNode node = root.SelectSingleNode("//" + nodeName);
if (node != null)
{
XmlString = node.InnerText;
}
return XmlString;
}
/// <summary>
/// 获取某一节点的所有孩子节点的值
/// </summary>
/// <param name="node">要查询的节点</param>
/// <param name="filePath">Xml文档路径</param>
public string[] ReadAllChildallValue(string node, string filePath)
{
int i = 0;
string[] str = { };
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlNode xn = doc.SelectSingleNode(node);
XmlNodeList nodelist = xn.ChildNodes; //得到该节点的子节点
if (nodelist.Count > 0)
{
str = new string[nodelist.Count];
foreach (XmlElement el in nodelist)//读元素值
{
str[i] = el.Value;
i++;
}
}
return str;
}
/// <summary>
/// 获取某一节点的所有孩子节点的值
/// </summary>
/// <param name="node">要查询的节点</param>
/// <param name="filePath">Xml文档路径</param>
public XmlNodeList ReadAllChild(string node, string filePath)
{
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlNode xn = doc.SelectSingleNode(node);
XmlNodeList nodelist = xn.ChildNodes; //得到该节点的子节点
return nodelist;
}
#endregion
Xml插入数据
#region Xml插入数据
/// <summary>
/// Xml指定节点元素属性插入数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="element">元素名</param>
/// <param name="attribute">属性名</param>
/// <param name="value">属性数据</param>
/// <returns></returns>
/**************************************************
* 使用示列:
* XmlHelper.XmlInsertValue(path, "/books", "book", "author", "Value")
************************************************/
public static void XmlInsertValue(string path, string node, string element, string attribute, string value)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xmlNode = doc.SelectSingleNode(node);
if (element.Equals(""))
{
if (!attribute.Equals(""))
{
XmlElement xe = (XmlElement)xmlNode;
xe.SetAttribute(attribute, value);
}
}
else
{
XmlElement xe = doc.CreateElement(element);
if (attribute.Equals(""))
xe.InnerText = value;
else
xe.SetAttribute(attribute, value);
//添加新增的节点
xmlNode.AppendChild(xe);
}
//保存Xml文档
doc.Save(path);
}
catch { }
}
#endregion
Xml修改数据
#region Xml修改数据
/// <summary>
/// Xml指定节点元素属性修改数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名</param>
/// <param name="value">属性数据</param>
/// <returns></returns>
/**************************************************
* 使用示列:
* XmlHelper.XmlUpdateValue(path, "/books", "book","author","Value")
************************************************/
public static void XmlUpdateValue(string path, string node, string attribute, string value)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xmlNode = doc.SelectSingleNode(node);
XmlElement xmlElement = (XmlElement)xmlNode;
if (attribute.Equals(""))
xmlElement.InnerText = value;
else
xmlElement.SetAttribute(attribute, value);
//保存Xml文档
doc.Save(path);
}
catch { }
}
#endregion
Xml删除数据
#region Xml删除数据
/// <summary>
/// 删除数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名</param>
/// <returns></returns>
/**************************************************
* 使用示列:
* XmlHelper.XmlDelete(path, "/books", "book")
************************************************/
public static void XmlDelete(string path, string node, string attribute)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xn = doc.SelectSingleNode(node);
XmlElement xe = (XmlElement)xn;
if (attribute.Equals(""))
xn.ParentNode.RemoveChild(xn);
else
xe.RemoveAttribute(attribute);
doc.Save(path);
}
catch { }
}
#endregion
完整的XmlHelper帮助类
注意:有些方法不能保证百分之百没有问题的,假如有问题可以留言给我,我会验证并立即修改。
/// <summary>
/// Xml帮助类
/// </summary>
public class XMLHelper
{
#region Xml反序列化为对象 /// <summary>
/// Xml反序列化为指定模型对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="xmlContent">Xml内容</param>
/// <param name="isThrowException">是否抛出异常</param>
/// <returns></returns>
public static T XmlConvertToModel<T>(string xmlContent, bool isThrowException = false) where T : class
{
StringReader stringReader = null;
try
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
stringReader = new StringReader(xmlContent);
return (T)xmlSerializer.Deserialize(stringReader);
}
catch (Exception ex)
{
if (isThrowException)
{
throw ex;
}
return null;
}
finally
{
stringReader?.Dispose();
}
} /// <summary>
/// 读取Xml文件内容反序列化为指定的对象
/// </summary>
/// <param name="filePath">Xml文件的位置(绝对路径)</param>
/// <returns></returns>
public static T DeserializeFromXml<T>(string filePath)
{
try
{
if (!File.Exists(filePath))
throw new ArgumentNullException(filePath + " not Exists");
using (StreamReader reader = new StreamReader(filePath))
{
XmlSerializer xs = new XmlSerializer(typeof(T));
T ret = (T)xs.Deserialize(reader);
return ret;
}
}
catch (Exception ex)
{
return default(T);
}
} #endregion #region 对象序列化为Xml /// <summary>
/// 对象序列化为Xml
/// </summary>
/// <param name="obj">对象</param>
/// <param name="isThrowException">是否抛出异常</param>
/// <returns></returns>
public static string ObjectSerializerXml<T>(T obj, bool isThrowException = false)
{
if (obj == null)
{
return string.Empty;
} try
{
using (StringWriter sw = new StringWriter())
{
Type t = obj.GetType();
//强制指定命名空间,覆盖默认的命名空间
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
//在Xml序列化时去除默认命名空间xmlns:xsd和xmlns:xsi
namespaces.Add(string.Empty, string.Empty);
XmlSerializer serializer = new XmlSerializer(obj.GetType());
//序列化时增加namespaces
serializer.Serialize(sw, obj, namespaces);
sw.Close(); string replaceStr = sw.ToString().Replace(@"<?xml version=""1.0"" encoding=""utf-16""?>", "");
return replaceStr;
}
}
catch (Exception ex)
{
if (isThrowException)
{
throw ex;
}
return string.Empty;
} } #endregion #region Xml字符处理 /// <summary>
/// 特殊符号转换为转义字符
/// </summary>
/// <param name="xmlStr"></param>
/// <returns></returns>
public string XmlSpecialSymbolConvert(string xmlStr)
{
return xmlStr.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\'", "'").Replace("\"", """);
} #endregion #region 创建Xml文档 /// <summary>
/// 创建Xml文档
/// </summary>
/// <param name="saveFilePath">文件保存位置</param>
public void CreateXmlDocument(string saveFilePath)
{
XmlDocument xmlDoc = new XmlDocument();
//创建类型声明节点
XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
xmlDoc.AppendChild(node);
//创建Xml根节点
XmlNode root = xmlDoc.CreateElement("books");
xmlDoc.AppendChild(root); XmlNode root1 = xmlDoc.CreateElement("book");
root.AppendChild(root1); //创建子节点
CreateNode(xmlDoc, root1, "author", "追逐时光者");
CreateNode(xmlDoc, root1, "title", "XML学习教程");
CreateNode(xmlDoc, root1, "publisher", "时光出版社"); //将文件保存到指定位置
xmlDoc.Save(saveFilePath/*"D://xmlSampleCreateFile.xml"*/);
} /// <summary>
/// 创建节点
/// </summary>
/// <param name="xmlDoc">xml文档</param>
/// <param name="parentNode">Xml父节点</param>
/// <param name="name">节点名</param>
/// <param name="value">节点值</param>
///
public void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value)
{
//创建对应Xml节点元素
XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);
node.InnerText = value;
parentNode.AppendChild(node);
} #endregion #region Xml数据读取 /// <summary>
/// 读取Xml指定节点中的数据
/// </summary>
/// <param name="filePath">Xml文档路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">读取数据的属性名</param>
/// <returns>string</returns>
/**************************************************
* 使用示列:
* XmlHelper.XmlReadNodeAttributeValue(path, "/books/book", "author")
************************************************/
public static string XmlReadNodeAttributeValue(string filePath, string node, string attribute)
{
string value = "";
try
{
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlNode xmlNode = doc.SelectSingleNode(node);
value = (attribute.Equals("") ? xmlNode.InnerText : xmlNode.Attributes[attribute].Value);
}
catch { }
return value;
} /// <summary>
/// 获得xml文件中指定节点的节点数据
/// </summary>
/// <param name="filePath">Xml文档路径</param>
/// <param name="nodeName">节点名</param>
/// <returns></returns>
public static string GetNodeInfoByNodeName(string filePath, string nodeName)
{
string XmlString = string.Empty;
XmlDocument xml = new XmlDocument();
xml.Load(filePath);
XmlElement root = xml.DocumentElement;
XmlNode node = root.SelectSingleNode("//" + nodeName);
if (node != null)
{
XmlString = node.InnerText;
}
return XmlString;
} /// <summary>
/// 获取某一节点的所有孩子节点的值
/// </summary>
/// <param name="node">要查询的节点</param>
/// <param name="filePath">Xml文档路径</param>
public string[] ReadAllChildallValue(string node, string filePath)
{
int i = 0;
string[] str = { };
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlNode xn = doc.SelectSingleNode(node);
XmlNodeList nodelist = xn.ChildNodes; //得到该节点的子节点
if (nodelist.Count > 0)
{
str = new string[nodelist.Count];
foreach (XmlElement el in nodelist)//读元素值
{
str[i] = el.Value;
i++;
}
}
return str;
} /// <summary>
/// 获取某一节点的所有孩子节点的值
/// </summary>
/// <param name="node">要查询的节点</param>
/// <param name="filePath">Xml文档路径</param>
public XmlNodeList ReadAllChild(string node, string filePath)
{
XmlDocument doc = new XmlDocument();
doc.Load(filePath);
XmlNode xn = doc.SelectSingleNode(node);
XmlNodeList nodelist = xn.ChildNodes; //得到该节点的子节点
return nodelist;
} #endregion #region Xml插入数据 /// <summary>
/// Xml指定节点元素属性插入数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="element">元素名</param>
/// <param name="attribute">属性名</param>
/// <param name="value">属性数据</param>
/// <returns></returns>
/**************************************************
* 使用示列:
* XmlHelper.XmlInsertValue(path, "/books", "book", "author", "Value")
************************************************/
public static void XmlInsertValue(string path, string node, string element, string attribute, string value)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xmlNode = doc.SelectSingleNode(node);
if (element.Equals(""))
{
if (!attribute.Equals(""))
{
XmlElement xe = (XmlElement)xmlNode;
xe.SetAttribute(attribute, value);
}
}
else
{
XmlElement xe = doc.CreateElement(element);
if (attribute.Equals(""))
xe.InnerText = value;
else
xe.SetAttribute(attribute, value);
//添加新增的节点
xmlNode.AppendChild(xe);
} //保存Xml文档
doc.Save(path);
}
catch { }
} #endregion #region Xml修改数据 /// <summary>
/// Xml指定节点元素属性修改数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名</param>
/// <param name="value">属性数据</param>
/// <returns></returns>
/**************************************************
* 使用示列:
* XmlHelper.XmlUpdateValue(path, "/books", "book","author","Value")
************************************************/
public static void XmlUpdateValue(string path, string node, string attribute, string value)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xmlNode = doc.SelectSingleNode(node);
XmlElement xmlElement = (XmlElement)xmlNode;
if (attribute.Equals(""))
xmlElement.InnerText = value;
else
xmlElement.SetAttribute(attribute, value); //保存Xml文档
doc.Save(path);
}
catch { }
} #endregion #region Xml删除数据 /// <summary>
/// 删除数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="node">节点</param>
/// <param name="attribute">属性名</param>
/// <returns></returns>
/**************************************************
* 使用示列:
* XmlHelper.XmlDelete(path, "/books", "book")
************************************************/
public static void XmlDelete(string path, string node, string attribute)
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode xn = doc.SelectSingleNode(node);
XmlElement xe = (XmlElement)xn;
if (attribute.Equals(""))
xn.ParentNode.RemoveChild(xn);
else
xe.RemoveAttribute(attribute);
doc.Save(path);
}
catch { }
} #endregion
}
C#XmlHelper帮助类操作Xml文档的通用方法汇总的更多相关文章
- XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。
XML DOM DOM 把 XML 文档视为一种树结构.通过这个 DOM 树,可以访问所有的元素.可以修改它们的内容(文本以及属性),而且可以创建新的元素.元素,以及它们的文本和属性,均被视为节点. ...
- 使用dom4j类操作xml文档
dom4j操作xml数据 1.Document对象相关 ①读取XML文件,获得document对象. SAXReader reader = new SAXReader(); Document docu ...
- 操作xml文档的常用方式
1.操作XML文档的两种常用方式: 1)使用XmlReader类和XmlWriter类操作 XmlReader是基于数据流的,占用极少的内存,是只读方式的,所以速度极快.只能采用遍历的模式查找数据节点 ...
- 文档对象模型操作xml文档
简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...
- XPath操作XML文档
NET框架下的Sytem.Xml.XPath命名空间提供了一系列的类,允许应用XPath数据模式查询和展示XML文档数据. 3.1XPath介绍 主要的目的是在xml1.0和1.1文档节点树种定位节点 ...
- 操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)
原文:操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP) 不管是用 PHP 还是 C#, 在操作 XML 的时候我们除了一个节点一个节点去取值之外, 还有一个非常方便的表达式, 就是 ...
- JDOM生成XML文档的一般方法
由于DOM提供的生成XML的方法不够直观,而且要用到各种繁琐的注解,鉴于此可借助第三方库-----JDOM生成XML文档.具体操作方式如下: import java.io.FileOutputStre ...
- C#XmlHelper操作Xml文档的帮助类
using System.Xml; using System.Data; namespace DotNet.Utilities { /// <summary> /// Xml的操作公共类 ...
- [XML] C# XmlHelper操作Xml文档的帮助类 (转载)
点击下载 XmlHelper.rar 主要功能如下所示 /// <summary> /// 类说明:XmlHelper /// 编 码 人:苏飞 /// 联系方式:361983679 // ...
随机推荐
- Solution -「HAOI 2018」「洛谷 P4491」染色
\(\mathcal{Description}\) Link. 用 \(m\) 种颜色为长为 \(n\) 的序列染色,每个位置一种颜色.对于一种染色方案,其价值为 \(w(\text{出现恰 ...
- uniapp 微信发送订阅消息
这篇主要针对小程序进行演示,既然是发送消息,那么就有三个问题.发送什么内容,给谁发送,怎么发送!往下一条一条解决. 发送什么消息内容 - 通过微信公众号平台 选择对应的消息模板 选择以后在我的模板里面 ...
- 突然发现,npm里request依赖包已经弃用,怎么办?
摘要:在npm官网查看了request依赖包的当前状态,果然在2020年就被弃用了. 本文分享自华为云社区<npm里request依赖包已经弃用?致敬并调研替代方案!>,作者: gentl ...
- Ubuntu20.04 Focal Cloudimage扩容以及KVM安装的问题记录
运行Ubuntu20.04的KVM虚机遇到一些问题, 单独总结一下 镜像扩容 不能用virt-resize --expand /dev/sda1 old.qcow2 new.qcow2这样的命令, 这 ...
- NSSCTF-error
打开网页出现一个输入框,尝试使用127.0.0.1发现只是回显我们输入的内容 尝试进行注入,输入数字1会回显没有提示......,order by进行判断列数,得到有三列 接着就是正常注入的思路,使用 ...
- 记一次腾讯云服务器centos linux可视化桌面安装并进行远程桌面登录及其安装中文包
开始前请确保你有能上网的主机两部(一个是CentOS7系统,一个是Windows10系统)1.用SSH root用户登录Centos主机:2.检查你的centos是否装了epel库 执行命令:rpm ...
- PPPoE协议测试——网络测试仪实操
前言: 与传统的接入方式相比,PPPoE具有较高的性能价格比,它在包括小区组网建设等一系列应用中被广泛采用,目前流行的宽带接入方式 ADSL 就使用了PPPoE协议. 随着低成本的宽带技术变得日益流行 ...
- 【C# 】继承
背景..什么是继承? 「继承」是对象导向编程的其中一个基本属性. 它可让您定义子类,重复使用(继承).扩充或修改父类别行为. 其成员可供继承的类别称为基底类别. 继承基底类别成员的类别则称为「衍生类别 ...
- 计算机网络——HTTP
目录 计算机网络-HTTP篇 HTTP 基本概念 常见状态码 常见字段 Get 与 Post HTTP 特性 HTTP(1.1) HTTP/1.1 HTTPS 与 HTTP HTTP/1.1.HTTP ...
- python文件操作glob_os_等对比
Python标准库glob介绍 一. glob模块通配符 通配符 功能 * 匹配0或多个字符 ** 匹配所有文件,目录,子目录和子目录里面的文件 (3.5版本新增) ? 匹配一个字符,这里与正则表达式 ...