这是不是一个非常有效的解决方案,因为插入(它可能会更好地构建字符串,从编码的文件内容中添加76个字符,然后一个新行,然后是76个字符,然后又是一个新的行,...),但它很短并显示出总体思路。如果需要考虑内存使用情况和性能,还可以考虑用直接将字节编码为StringBuilder
的代码替换Convert.ToBase64String()
调用。
public static XElement BuildNode(Byte[] data, XName tagName, Int32 lineLength)
{
StringBuilder sb = new StringBuilder(Convert.ToBase64String(data));
Int32 position = 0;
while (position < sb.Length)
{
sb.Insert(position, Environment.NewLine);
position += lineLength + Environment.NewLine.Length;
}
sb.AppendLine();
return new XElement(tagName, sb.ToString());
}
例如
String text = "I have got to convert a PDF to a Base64 Encoded " +
"and write it to a element in a XML file.";
Byte[] data = Encoding.UTF8.GetBytes(text);
StringBuilder sb = new StringBuilder();
TextWriter tw = new StringWriter(sb);
using (var writer = new XmlTextWriter(tw) { Formatting = Formatting.Indented })
{
XDocument document = new XDocument(BuildNode(data, "Content", 40));
document.Save(writer);
}
Console.WriteLine(sb.ToString());
打印以下。
<?xml version="1.0" encoding="utf-16"?>
<Content>
SSBoYXZlIGdvdCB0byBjb252ZXJ0IGEgUERGIHRv
IGEgQmFzZTY0IEVuY29kZWQgYW5kIHdyaXRlIGl0
IHRvIGEgZWxlbWVudCBpbiBhIFhNTCBmaWxlLg==
</Content>