XML的一些事
2016-02-26 13:49 只喝牛奶的杀手 阅读(376) 评论(0) 编辑 收藏 举报XML文件的优缺点:
使用XML作为传输格式的优势:
1. 格式统一, 符合标准
2. 容易与其他系统进行远程交互, 数据共享比较方便
3.调用将 XML 用作传输的现有服务。
4.使用 XSLT 可以动态转换 XML。这是企业服务总线 (ESB) 方案中的理想功能。
缺点:
1. XML文件格式文件庞大, 格式复杂, 传输占用带宽;
2. 服务器端和客户端都需要花费大量代码来解析XML, 不论服务器端和客户端代码变的异常复杂和不容易维护;
3. 客户端不同浏览器之间解析XML的方式不一致, 需要重复编写很多代码;
4. 服务器端和客户端解析XML花费资源和时间;
现在大家大多数都用的json但是XML文件的重要性不可忽略,XML文件也是比较脆弱的!
拼接的字符串写入到XML文件中:
public static void WriteXMLWay() { StringBuilder sb = new StringBuilder(); sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); sb.Append("<sitemapindex><sitemap>"); for (int i = 1; i <= GetSitmapCount(); i++) { sb.Append(GetSiteMapFormat(string.Format("http://www.website.com/sitemap/shenma/detail_{0}.xml", i))); } sb.Append("</sitemap></sitemapindex>"); try { //方法一 XmlDocument xd = new XmlDocument(); xd.LoadXml(sb.ToString()); xd.Save(@"\\sitemap.xml"); //方法二 File.WriteAllText(@"\\sitemap.xml", sb.ToString(), Encoding.UTF8); } catch (Exception ex) { XX.General.Exception.Error(ex, "ExecuteUpdateXmlforShenMa"); } }
去除XML文件里面的特殊字符:
public static string FormatXmlText(string strHtml) { string[] aryReg = { "'", "<", ">", "%", "\"\"", ",", ".", ">", "<", "\\", ">=", "=<", "-", "_", ";", "||", "[", "]", "&", "/", "-", "|", " ", }; for (int i = 0; i < aryReg.Length; i++) { strHtml = strHtml.Replace(aryReg[i], string.Empty); } return strHtml.Replace("[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]", ""); }
XML序列化时生成CDATA节点解决方法:
public partial class Person { [XmlIgnore] public string Name { get; set; } [XmlIgnore] public int Age { get; set; } } public partial class Person { [XmlElement("Name")] public XmlNode aaa { get { XmlNode node = new XmlDocument().CreateNode(XmlNodeType.CDATA, "", ""); node.InnerText = Name; return node; } set { } //省略则aaa不会被序列化 } [XmlElement("Age")] public XmlNode bbb { get { XmlNode node = new XmlDocument().CreateNode(XmlNodeType.Text, "", ""); node.InnerText = Age.ToString(); return node; } set { } //省略则bbb不会被序列化 } } class Program { static void Main(string[] args) { string result = string.Empty; Person person = new Person() { Name = "dnawo", Age = 100 }; using (MemoryStream output = new MemoryStream()) { XmlSerializer serializer = new XmlSerializer(person.GetType()); serializer.Serialize(output, person); result = Encoding.UTF8.GetString(output.ToArray()); } Console.WriteLine(result); Console.ReadKey(); } }
输出的XML代码:
<?xml version="1.0"?> <Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Name><![CDATA[dnawo]]></Name> <Age>100</Age> </Person>
字符串写入XML编码的问题:
XmlDocument xd = new XmlDocument(); using (Utf8StringWriter sw = new Utf8StringWriter()) { try { XmlSerializer xz = new XmlSerializer(shenma.GetType()); xz.Serialize(sw, shenma); xd.LoadXml(sw.ToString()); xd.Save(string.Format(@"\\SiteMap\shenma\detail_{0}.xml", i)); } catch (Exception ex) { XX.General.Exception.Error(ex, "ExecuteUpdateXmlforShenMa"); } finally { redisclient.SetString("sitemap_shenma_novelid", novelid.ToString()); System.Threading.Thread.Sleep(5000); } }
//让stringreader的编码默认为utf-8string
public sealed class Utf8StringWriter : StringWriter { public override Encoding Encoding { get { return Encoding.UTF8; } } }
个人观点:XML文件逐渐被JSON代替,XML文件比较脆弱,用着没JSON好用!
欢迎大家关注微信号killerhub,微信公众号名称:只喝牛奶的杀手, 扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端