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