internal static DataStream FromXml(string xml) { if (xml.IsNullOrEmpty()) { return(null); } var doc = XDocument.Parse(xml); var ns = doc.Root.GetDefaultNamespace(); var root = doc.Element(ns + "MTConnectStreams"); // this happens on an error // TODO: get the error text if (root == null) { return(null); } var dataStream = new DataStream(); var streams = new List <DeviceStream>(); var header = root.Element(ns + "Header"); var attr = header.Attribute("creationTime"); if (attr != null) { try { dataStream.CreateTime = DateTime.Parse(attr.Value); } catch { } } attr = header.Attribute("sender"); if (attr != null) { try { dataStream.Sender = attr.Value; } catch { } } attr = header.Attribute("instanceId"); if (attr != null) { try { dataStream.InstanceID = long.Parse(attr.Value); } catch { } } attr = header.Attribute("nextSequence"); if (attr != null) { try { dataStream.NextSequence = int.Parse(attr.Value); } catch { } } attr = header.Attribute("firstSequence"); if (attr != null) { try { dataStream.FirstSequence = int.Parse(attr.Value); } catch { } } attr = header.Attribute("lastSequence"); if (attr != null) { try { dataStream.LastSequence = int.Parse(attr.Value); } catch { } } foreach (var deviceStream in root.Element(ns + "Streams").Elements(ns + "DeviceStream")) { var ds = DeviceStream.FromXml(ns, deviceStream); streams.Add(ds); } dataStream.DeviceStreams = streams.ToArray(); return(dataStream); }
internal static DeviceStream FromXml(XNamespace ns, XElement element) { var ds = new DeviceStream(); var attr = element.Attribute("name"); if (attr == null) { throw new Exception("Device Stream missing 'name' attribute"); } ds.Name = attr.Value; attr = element.Attribute("uuid"); if (attr == null) { throw new Exception("Device Stream missing 'uuid' attribute"); } ds.UUID = attr.Value; // <samples> var samples = new List <IDataElement>(); var samplesElement = element.Element(ns + "Samples"); if (samplesElement != null) { foreach (var s in samplesElement.Elements()) { samples.Add(DataElementFactory.SampleFromXml(ns, s)); } } ds.m_elements.AddRange(samples); // <events> var events = new List <IDataElement>(); var eventsElement = element.Element(ns + "Events"); if (eventsElement != null) { foreach (var s in eventsElement.Elements()) { events.Add(DataElementFactory.EventFromXml(ns, s)); } } ds.m_elements.AddRange(events); // <condition> var conditions = new List <IDataElement>(); foreach (var ce in element.Elements(ns + "Condition")) { foreach (var c in ce.Elements()) { conditions.Add(DataElementFactory.ConditionFromXml(ns, c)); } } ds.m_elements.AddRange(conditions); List <ComponentStream> streams = new List <ComponentStream>(); foreach (var componentStream in element.Elements(ns + "ComponentStream")) { streams.Add(ComponentStream.FromXml(ns, componentStream)); } ds.ComponentStreams = streams.ToArray(); return(ds); }