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