OpenXml开发-验证OpenXml文件

it2022-05-05  86

采用程序自动生成文件的方式时,偶尔会遇到文件不合法的情况,所以最好对生成的文件验证一下,下面是一个简单的验证程序(是从一个例子里看到的):

        static void ValidateOpenXMLFile(byte[] data, XmlSchemaSet schemas)        {            using (PackageHelper package = new PackageHelper(data))            {                foreach (PackagePartHelper part in package.GetItems())                {                    Console.WriteLine("Validating part {0}", part.PartName);                    XmlReaderSettings settings = new XmlReaderSettings();                    settings.Schemas.Add(schemas);                    settings.ValidationType = ValidationType.Schema;                    settings.ValidationEventHandler += DisplayValidationError;                    using (XmlReader reader = XmlReader.Create(part.GetStream()))                    {                        while (reader.Read()) ;                    }                }            }        }

        static void DisplayValidationError(object sender, ValidationEventArgs e)        {            Console.Error.WriteLine("Validation error: {0}", e.Message);        }

   class SchemaLoader        {        public static XmlSchemaSet LoadWordProcessingMLSchemas()        {            return CreateSchemaSet(                "..//..//..//Schemas//wml.xsd");        }

        public static XmlSchemaSet LoadSpreadsheetMLSchemas()        {            return CreateSchemaSet(                "..//..//..//Schemas//sml-workbook.xsd",                "..//..//..//Schemas//sml-sheet.xsd");        }

        public static XmlSchemaSet LoadPresentationMLSchemas()        {            return CreateSchemaSet(                "..//..//..//Schemas//pml-presentation.xsd",                "..//..//..//Schemas//pml-slide.xsd");        }

        private static XmlSchemaSet CreateSchemaSet(params string[] schemaFiles)        {            XmlSchemaSet schemas = new XmlSchemaSet();            foreach (string schemaFile in schemaFiles)            {                AddSchemaFile(schemas, schemaFile);            }            schemas.Compile();            return schemas;        }

        private static void AddSchemaFile(XmlSchemaSet schemas, string path)        {            using (XmlReader reader = XmlReader.Create(path))            {                schemas.Add(XmlSchema.Read(reader, DisplaySchemaError));            }        }

        private static void DisplaySchemaError(object sender, ValidationEventArgs e)        {            Console.Error.WriteLine("Schema load error: {0}", e.Message);        }       }          调用:        Console.WriteLine("Validating WordProcessingML");            ValidateOpenXMLFile(Properties.Resources.WordProcessingMLReport,                 SchemaLoader.LoadWordProcessingMLSchemas());

            Console.WriteLine("Validating SpreadsheetML");            ValidateOpenXMLFile(Properties.Resources.SpreadsheetMLReport,                 SchemaLoader.LoadSpreadsheetMLSchemas());

            Console.WriteLine("Validating PresentationML");            ValidateOpenXMLFile(Properties.Resources.PresentationMLReport,                 SchemaLoader.LoadPresentationMLSchemas());

转载于:https://www.cnblogs.com/blue-skies/archive/2010/07/19/1780842.html


最新回复(0)