【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中,原因就不用我多解释了。
示例代码下载:http://files.cnblogs.com/files/tcjiaan/putfiletoxmldoc.zip
【Win 10应用开发】把文件嵌入到XML文档的更多相关文章
- 【Win 10 应用开发】文件读写的三种方案
本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧 ...
- Objective-C ,ios,iphone开发基础:使用GDataXML解析XML文档,(libxml/tree.h not found 错误解决方案)
使用GDataXML解析XML文档 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用第三方的库,原因是解析效率更高.使用上更方便 这里主要介绍一下 ...
- net9:磁盘目录文件保存到XML文档及其XML文档的读写操作,以及绑定XML到treeview
原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] directorytoxml类: using System;using System.Data;using Sys ...
- 【Win 10 应用开发】在后台播放视频
从 1607 (14393)版本开始,MediaPlayer 类就可以在前台与后台之间无缝播放,你不必再考虑前台与后之间的通信,所以从 14393 开始,你就不需要再用 BackgroundMedia ...
- 【HTML/XML 10】XML文档中的Schema文件
导读:DTD是对XML文档进行有效性验证的方法之一,事实上,继DTD之后,出现了用来规范和描述XML文档的第二代标准:Schema.Schema是DTD的继承,但是也有其不同的地方,它是真正的以独立的 ...
- Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构
分享两篇Win 10应用开发的XML文档结构:Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构. Win 10 开发中Adapt ...
- 【Win 10 应用开发】Toast通知激活应用——前台&后台
老周最近热衷于讲故事,接下来还是讲故事时间. 有人问我:你上大学的时候,有加入过学生会吗?读大学有没有必要加入学生会? 哎哟,这怎么回答呢,从短期来说,加入学生会有点用,至少可以娱乐一下,运气好的话, ...
- 【Win10 应用开发】自适应Toast通知的XML文档结构
老规矩,在开始之前老周先讲个故事. 话说公元2015年7月20日,VS 2015发布.于是,肯定有人会问老周了,C#6有啥新特性,我学不来啊.学不来的话你应该检讨.老周比较保守地计算一下,学会C# 6 ...
- Java开发知识之XML文档使用,解析
目录 XML文件详解 一丶XML简介 1.文档结构 2.XML中的元素(Element)或者叫做标签(Tab).属性 文本内容. 节点(Node) 3.XML语法规则 二丶XML文档解析 三丶使用XP ...
随机推荐
- C# DateTime与时间戳转换
C# DateTime与时间戳的相互转换,包括JavaScript时间戳和Unix的时间戳. 1. 什么是时间戳 首先要清楚JavaScript与Unix的时间戳的区别: JavaScript时间戳: ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 关于 devbridge-autocomplete 插件多选操作的实现方法
目前据我所知最好用的 autocomplete 插件就是 jquery-ui 的 autocomplete 以及 devbridge 的 autocomplete 插件. 我最终选择了 devbrid ...
- python+uwsgi导致redis无法长链接引起性能下降问题记录
今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...
- css常用hack
原文地址:css常用hack 突然想起今天早上在CNZZ看到的统计数据,使用IE6.7的用户比例还真多,看到之后我的心都碎了.微软都放弃了为毛还有这么多人不死心? 所以说,IE下的兼容还是得做的. – ...
- 游戏AI系列内容 咋样才能做个有意思的AI呢
游戏AI系列内容 咋样才能做个有意思的AI呢 写在前面的话 怪物AI怎么才能做的比较有意思.其实这个命题有点大,我作为一个仅仅进入游戏行业两年接触怪物AI还不到一年的程序员来说,来谈这个话题,我想我是 ...
- Android系统默认对话框添加图片
开发工具Android Studio 今天公司UI要求软件对话框改成加图片的,以前没有做过,所以就学习了一下,废话不多说, 看效果: 创建XML文件dialog_lsit_item.xml <L ...
- Android Retrofit 2.0 使用-补充篇
推荐阅读,猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava 4.RxBus 5.Android MVP+Retrofit+RxJava实践小 ...
- Linux 利用Google Authenticator实现ssh登录双因素认证
1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一 ...
- 设置WindowServer2012 时间同步NTP
在powershell中以管理员身份运行以下命令即可 w32tm /config /manualpeerlist:pool.ntp.org /syncfromflags:MANUAL Stop-Ser ...