碼演示了把一個string數據轉換為Base64 編碼的XML流。圖九是輸出的結果。
Figure 8 Persisting a String Array as Base64
using System;
using System.Text;
using System.IO;
using System.XML;
class MyBase64Array
{
public static void Main(String[] args)
{
string outputFileName = "test64.XML";
if (args.Length > 0)
outputFileName = args[0]; // file name
// 把數組轉換成XML
String[] theArray = {"Rome", "New York", "Sydney", "Stockholm",
"Paris"};
CreateOutput(theArray, outputFileName);
return;
}
private static void CreateOutput(string[] theArray, string filename)
{
// 打開XML writer
XMLTextWriter XMLw = new XMLTextWriter(filename, null);
//使子元素根據 Indentation 和 IndentChar 設置縮進。此選項只對元素內容進行縮進
XMLw.Formatting = Formatting.Indented;
//書寫版本為“1.0”的 XML 聲明
XMLw.WriteStartDocument();
//寫出包含指定文本的注釋 。
XMLw.WriteComment("Array to Base64 XML");
//開始寫出array節點
XMLw.WriteStartElement("array");
//寫出具有指定的前綴、本地名稱、命名空間 URI 和值的屬性
XMLw.WriteAttributeString("XMLns", "x", null, "dinoe:msdn-mag");
// 循環的寫入array的子節點
foreach(string s in theArray)
{
//寫出指定的開始標記並將其與給定的命名空間和前綴關聯起來
XMLw.WriteStartElement("x", "element", null);
//把S轉換成byte[]數組, 並把byte[]數組編碼為 Base64 並寫出結果文本,要寫入的字節數為s總長度的2倍,一個string占的字節數是2字節。
XMLw.WriteBase64(Encoding.Unicode.GetBytes(s), 0, s.Length*2);
//關閉子節點
XMLw.WriteEndElement();
}
//關閉根節點,只有兩級
XMLw.WriteEndDocument();
// 關閉writer
XMLw.Close();
// 讀出寫入的內容
XMLTextReader reader = new XMLTextReader(filname);
while(reader.Read())
{
//獲取節點名為element的節點
if (reader.LocalName == "element")
{
byte[] bytes = new byte[1000];
int n = reader.ReaDBase64(bytes, 0, 1000);
string buf = Encoding.Unicode.GetString(bytes);
Console.WriteLine(buf.Substring(0,n));
}
}
reader.Close();
}
}