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