既然你已經從DB byte[]
陣列,前後寫更多的字節數組存儲流應該是很容易:
// bytes from db
byte[] multipleNodes = Encoding.UTF8.GetBytes("<first>..</first><second>..</second><third>..</third>");
using (var ms = new MemoryStream())
{
// write opening tag
byte[] newRoot = Encoding.UTF8.GetBytes("<newRoot>");
ms.Write(newRoot, 0, newRoot.Length);
ms.Write(multipleNodes, 0, multipleNodes.Length);
// write opening tag
byte[] closeNewRoot = Encoding.UTF8.GetBytes("</newRoot>");
ms.Write(closeNewRoot, 0, closeNewRoot.Length);
// reset cursor position before pass it to xmldoc
ms.Position = 0;
var xml = new XmlDocument();
xml.Load(ms);
Console.WriteLine(xml.InnerXml);
}
但由於XmlDocument
還提供LoadXml(str)
,感覺操縱字符串應該是更直接的解決方案:
// bytes from db
byte[] multipleNodes = Encoding.UTF8.GetBytes("<first>..</first><second>..</second><third>..</third>");
string stringFromBlob = Encoding.UTF8.GetString(multipleNodes);
string withRootNode = string.Format("<newRoot>{0}</newRoot>", stringFromBlob);
var xml = new XmlDocument();
xml.LoadXml(withRootNode);
Console.WriteLine(xml.InnerXml);
您的第一個解決方案是我想建議。你的第二個,雖然直截了當,正確,感覺效率太低,以至於我不認爲第一個是不成熟的優化... – zmbq
@zmbq不知道這一點,但由於OP已經得到'byte []數組加載到內存中。我覺得把它轉換爲字符串(並與其他文本一起格式化)的額外成本應該不會太高。 – Gant