#region using System.Data; using System.Reflection; using System.Xml; using System.Xml.Schema; #endregion namespace CSFrameworkV5.Language { public class SafeXMLReader { public static DataTable LoadFromAssembly(Assembly asm, string asmXmlName, string xsdFile) { var tmp = new DataTable("lan"); tmp.Columns.Add("ObjectID", typeof(string)); tmp.Columns.Add("Content", typeof(string)); tmp.WriteXmlSchema(xsdFile); //保存XSD文件 // New Validation Xml. var xsd = new XmlSchema(); xsd.SourceUri = xsdFile; var schemaSet = new XmlSchemaSet(); schemaSet.ValidationEventHandler += ValidationEventCallBack; schemaSet.Add(xsd); var settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.DtdProcessing = DtdProcessing.Prohibit; settings.XmlResolver = null; settings.Schemas.Add(schemaSet); settings.Schemas.Compile(); settings.ValidationEventHandler += ValidationEventCallBack; using (var stm1 = asm.GetManifestResourceStream(asmXmlName)) { using (var reader = XmlReader.Create(stm1, settings)) { tmp.ReadXml(reader); } ; } return tmp; } private static void ValidationEventCallBack(object sender, ValidationEventArgs e) { if (e.Severity == XmlSeverityType.Warning) //区分是警告还是错误 { //Console.WriteLine("验证成功!警告:" + e.Message); //ErrString += "验证成功!警告:" + e.Message; } // Console.WriteLine("验证失败"); //ErrString += "Err:" + e.Message; } } }