Anyway, here are a couple of converting functions that are useful.
Recordset <-> XML
/// <summary>
/// Convert XML to recordset
/// </summary>
/// <param name="sXML"></param>
/// <returns>Recordset</returns>
public static Recordset recordsetFromXML(string sXML)
{
if (string.IsNullOrEmpty(sXML))
{
// Nothing to convert
return null;
}
// Open an ADO Stream
var oStream = new Stream();
oStream.Open(Missing.Value, ConnectModeEnum.adModeUnknown,
StreamOpenOptionsEnum.adOpenStreamUnspecified,
"", "");
// Load the XML string into stream
oStream.WriteText(sXML, StreamWriteEnum.adWriteChar);
oStream.Position = 0;
// Create empty recordset
var oRecordset = new Recordset();
// Read the XML stream
oRecordset.Open(oStream, Missing.Value,
CursorTypeEnum.adOpenUnspecified,
LockTypeEnum.adLockUnspecified, 0);
oStream.Close();
//Return the recordset
return oRecordset;
}
/// <summary>
/// Convert recordset to XML
/// </summary>
/// <param name="oRecordset"></param>
/// <returns>String</returns>
public static string recordsetToXML(Recordset oRecordset)
{
string xmlString = "";
if (oRecordset != null)
{
// Load recordset into stream
var oStream = new Stream();
oRecordset.Save(oStream, PersistFormatEnum.adPersistXML);
// Get the XML
xmlString = oStream.ReadText(oStream.Size);
}
return xmlString;
}
Stream <-> XML
/// <summary>
/// Convert XML to stream
/// </summary>
/// <param name="sXML"></param>
/// <returns>Stream</returns>
public static Stream streamFromXML(string sXML)
{
// Load XML into XmlDocument
var oXML = new XmlDocument();
oXML.InnerXml = sXML;
// Get the STREAM element
var aNode = oXML.GetElementsByTagName("STREAM")[0];
// Create a binary stream
var oStream = new Stream();
oStream.Type = StreamTypeEnum.adTypeBinary;
oStream.Open(Missing.Value, ConnectModeEnum.adModeUnknown,
StreamOpenOptionsEnum.adOpenStreamUnspecified,
"", "");
// Load XML
oStream.Write(Convert.FromBase64String(aNode.InnerXml));
oStream.Position = 0;
return oStream;
}
/// <summary>
/// Convert stream to XML
/// </summary>
/// <param name="oStream"></param>
/// <returns>String</returns>
public static string streamToXML(Stream oStream)
{
// Create XmlDocument
var oXML = new XmlDocument();
oXML.AppendChild(oXML.CreateProcessingInstruction("xml", "version='1.0'"));
// Add STREAM element to hold the binary data
XmlElement oElem = oXML.CreateElement("STREAM");
// Define type of value
XmlAttribute dt = oXML.CreateAttribute("dt", "dt", "urn:schemas-microsoft-com:datatypes");
dt.Value = "bin.base64";
oElem.SetAttributeNode(dt);
// Convert stream data to string
oElem.InnerXml = Convert.ToBase64String((byte[])oStream.Read(-1));
oXML.AppendChild(oElem);
// Return Xml
return oXML.InnerXml;
}
No comments:
Post a Comment