【Win 10应用开发】把文件嵌入到XML文档
把文件内容嵌入(或存入)到XML文档中,相信很多朋友会想到把字节数组转化为Base64字符串,再作为XML文档的节点。不过,有人会说了,转化后的base64字符串中含有像“+”这样的符号,写入到XML文档中会发生解析错误。
不知你是否想起XML文档有一种CData内容节点,它可以忽略对字符的解析处理,使用CData节点,可以存放base64字符串。
要在Win App中实现这种处理也不难。
读写XML文档有多种方法,既可以使用.net core中的类,也可以用Linq to XML,还可以用运行时API中提供的操作类型。你喜欢使用哪一种都无所谓。
下面老周以运行时API为例,演示如何把一个文件的内容嵌入到XML文档中。
真的不复杂,上代码你知道了。
// 选取文件 FileOpenPicker picker = new FileOpenPicker(); picker.FileTypeFilter.Add("*"); //所有文件 StorageFile file = await picker.PickSingleFileAsync(); if (file == null) { return; } // 存放文件名 string fileName = file.Name; // 文件大小 ulong len = (await file.GetBasicPropertiesAsync()).Size; // base64 字符串 string b64datastr = null; // 读取文件内容 using (DataReader reader = new DataReader(await file.OpenReadAsync())) { await reader.LoadAsync((uint)len); IBuffer buffer = reader.ReadBuffer(reader.UnconsumedBufferLength); // 计算base64字符串 b64datastr = CryptographicBuffer.EncodeToBase64String(buffer); } // 构造XML文档 XmlDocument xml = new XmlDocument(); // 根节点 XmlElement root = xml.CreateElement("fileinfo"); xml.AppendChild(root); // 存放文件名的节点 XmlElement namenode = xml.CreateElement("name"); namenode.AppendChild(xml.CreateTextNode(fileName)); root.AppendChild(namenode); // 文件内容节点 XmlElement datanode = xml.CreateElement("content"); datanode.AppendChild(xml.CreateCDataSection(b64datastr)); root.AppendChild(datanode); // 显示XML内容 tbXML.Text = xml.GetXml(); // 将XML文档保存到“文档” StorageFolder doclib = KnownFolders.DocumentsLibrary; StorageFile newFile = await doclib.CreateFileAsync("test.xml", CreationCollisionOption.ReplaceExisting); await xml.SaveToFileAsync(newFile); Windows.UI.Popups.MessageDialog d = new Windows.UI.Popups.MessageDialog("保存成功。"); await d.ShowAsync();
关键点是这几行代码:
// 构造XML文档 XmlDocument xml = new XmlDocument(); // 根节点 XmlElement root = xml.CreateElement("fileinfo"); xml.AppendChild(root); // 存放文件名的节点 XmlElement namenode = xml.CreateElement("name"); namenode.AppendChild(xml.CreateTextNode(fileName)); root.AppendChild(namenode); // 文件内容节点 XmlElement datanode = xml.CreateElement("content"); datanode.AppendChild(xml.CreateCDataSection(b64datastr)); root.AppendChild(datanode);
这几行代码的功能是在内存中构建XML文档的结构。
最后看看,文件嵌入到XML后是什么情况。
最后说一声,体积太大的文件不宜嵌入到XML中,原因就不用我多解释了。
示例代码下载:https://files.cnblogs.com/files/tcjiaan/putfiletoxmldoc.zip
分类:
个人文章
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用
2014-12-20 【WP8.1开发】选择与搜索联系人