1
yhj
2024-07-24 5e5d945e91568b973faa27d8ab0bcef99fc4a6c5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#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;
        }
    }
}