private void OnParseWork(Object state) { try { AdDescriptor adDescriptor = null; System.IO.Stream stream = state as System.IO.Stream; System.Xml.XmlReaderSettings readerSettings = new System.Xml.XmlReaderSettings(); readerSettings.IgnoreWhitespace = true; readerSettings.IgnoreComments = true; readerSettings.IgnoreProcessingInstructions = true; System.Xml.XmlReader reader = System.Xml.XmlReader.Create(stream, readerSettings); Dictionary <string, string> adInfo = new Dictionary <string, string>(); while (reader.Read()) { if (reader.IsStartElement()) { if (reader.Name == "error") { string errorCode = reader.GetAttribute("code"); string errorMessage = string.Empty; // read past the name reader.Read(); // read the contents switch (reader.NodeType) { case System.Xml.XmlNodeType.CDATA: case System.Xml.XmlNodeType.Text: errorMessage = reader.ReadContentAsString(); break; } if (this.errorCallback != null) { this.errorCallback(this, errorCode, errorMessage); Cancel(); } // no need to parse anything else break; } else if (reader.Name == "ad") { string adType = reader.GetAttribute("type"); adInfo["type"] = adType; // read each child node (passing ad node first) while (reader.Read()) { if (reader.IsStartElement() == false) { if ((reader.NodeType == System.Xml.XmlNodeType.EndElement) && (reader.Name == "ad")) { // done with the descriptor break; } // advance to start of next descriptor property continue; } string name = reader.Name; // read past the name reader.Read(); // read the content which may be text or cdata from the ad server string value = null; switch (reader.NodeType) { case System.Xml.XmlNodeType.CDATA: case System.Xml.XmlNodeType.Text: value = reader.ReadContentAsString(); break; } if ((string.IsNullOrEmpty(name) == false) && (string.IsNullOrEmpty(value) == false)) { adInfo[name] = value; } } adDescriptor = new AdDescriptor(adInfo); // no need to parse anything else break; } } } if (this.completedCallback != null) { this.completedCallback(this, adDescriptor); } } catch (Exception ex) { if (this.failedCallback != null) { this.failedCallback(this, ex); } } Cancel(); }
private void OnParseWork(Object state) { try { AdDescriptor adDescriptor = null; System.IO.Stream stream = state as System.IO.Stream; System.Xml.XmlReaderSettings readerSettings = new System.Xml.XmlReaderSettings(); readerSettings.IgnoreWhitespace = true; readerSettings.IgnoreComments = true; readerSettings.IgnoreProcessingInstructions = true; System.Xml.XmlReader reader = System.Xml.XmlReader.Create(stream, readerSettings); Dictionary<string, string> adInfo = new Dictionary<string, string>(); while (reader.Read()) { if (reader.IsStartElement()) { if (reader.Name == "error") { string errorCode = reader.GetAttribute("code"); string errorMessage = string.Empty; // read past the name reader.Read(); // read the contents switch (reader.NodeType) { case System.Xml.XmlNodeType.CDATA: case System.Xml.XmlNodeType.Text: errorMessage = reader.ReadContentAsString(); break; } if (this.errorCallback != null) { this.errorCallback(this, errorCode, errorMessage); Cancel(); } // no need to parse anything else break; } else if (reader.Name == "ad") { string adType = reader.GetAttribute("type"); adInfo["type"] = adType; // read each child node (passing ad node first) while (reader.Read()) { if (reader.IsStartElement() == false) { if ((reader.NodeType == System.Xml.XmlNodeType.EndElement) && (reader.Name == "ad")) { // done with the descriptor break; } // advance to start of next descriptor property continue; } string name = reader.Name; // read past the name reader.Read(); // read the content which may be text or cdata from the ad server string value = null; switch (reader.NodeType) { case System.Xml.XmlNodeType.CDATA: case System.Xml.XmlNodeType.Text: value = reader.ReadContentAsString(); break; } if ((string.IsNullOrEmpty(name) == false) && (string.IsNullOrEmpty(value) == false)) { adInfo[name] = value; } } adDescriptor = new AdDescriptor(adInfo); // no need to parse anything else break; } } } if (this.completedCallback != null) { this.completedCallback(this, adDescriptor); } } catch (Exception ex) { if (this.failedCallback != null) { this.failedCallback(this, ex); } } Cancel(); }