/// <summary> /// Validates the package. This method does not validate the XML content in each part. /// </summary> /// <param name="validationSettings">The OpenXmlPackageValidationSettings for validation events.</param> public void Validate(OpenXmlPackageValidationSettings validationSettings) { if (validationSettings is null) { throw new ArgumentNullException(nameof(validationSettings)); } if (validationSettings.GetEventHandler() is null) { throw new ArgumentNullException(nameof(validationSettings.EventHandler)); } if (!validationSettings.FileFormat.Any()) { throw new ArgumentOutOfRangeException(nameof(validationSettings.FileFormat)); } var handler = validationSettings.GetEventHandler(); if (handler is null) { return; } foreach (var result in Validate(validationSettings.FileFormat)) { handler(result.Sender, result); } }
#pragma warning disable 0618 // CS0618: A class member was marked with the Obsolete attribute, such that a warning will be issued when the class member is referenced. private void ValidatePackageStructure(OpenXmlPackage document) { OpenXmlPackageValidationSettings packageValidationSettings = new OpenXmlPackageValidationSettings(); packageValidationSettings.EventHandler += this.OnPackageValidationError; document.Validate(packageValidationSettings, this.ValidationSettings.FileFormat); return; }
#pragma warning disable 0618 // CS0618: A class member was marked with the Obsolete attribute, such that a warning will be issued when the class member is referenced. private void ValidatePackageStructure(OpenXmlPackage document) { OpenXmlPackageValidationSettings packageValidationSettings = new OpenXmlPackageValidationSettings(); packageValidationSettings.EventHandler += this.OnPackageValidationError; document.Validate(packageValidationSettings, this.ValidationSettings.FileFormat); return; }
private void ValidatePackageStructure(OpenXmlPackage document, ValidationContext context) { var documentName = document.GetType().Name; #pragma warning disable CS0618 // Type or member is obsolete var packageValidationSettings = new OpenXmlPackageValidationSettings(); #pragma warning restore CS0618 // Type or member is obsolete packageValidationSettings.EventHandler += OnPackageValidationError; document.Validate(packageValidationSettings, _validationSettings.FileFormat); #pragma warning disable CS0618 // Type or member is obsolete void OnPackageValidationError(Object sender, OpenXmlPackageValidationEventArgs e) #pragma warning restore CS0618 // Type or member is obsolete { var errorInfo = new ValidationErrorInfo { ErrorType = ValidationErrorType.Package, Id = "Pkg_" + e.MessageId }; string name; switch (errorInfo.Id) { case "Pkg_PartIsNotAllowed": Debug.Assert(e.SubPart != null); name = e.Part != null?GetPartNameAndUri(e.Part) : documentName; errorInfo.Description = String.Format(CultureInfo.CurrentUICulture, ValidationResources.Pkg_PartIsNotAllowed, name, GetPartNameAndUri(e.SubPart)); break; case "Pkg_RequiredPartDoNotExist": errorInfo.Description = string.Format(CultureInfo.CurrentUICulture, ValidationResources.Pkg_RequiredPartDoNotExist, e.PartClassName); break; case "Pkg_OnlyOnePartAllowed": name = e.Part != null?GetPartNameAndUri(e.Part) : documentName; errorInfo.Description = String.Format(CultureInfo.CurrentUICulture, ValidationResources.Pkg_OnlyOnePartAllowed, name, e.PartClassName); #if DEBUG Debug.Assert(e.SubPart != null); errorInfo.RelatedPart = e.SubPart; #endif break; case "Pkg_ExtendedPartIsOpenXmlPart": Debug.Assert(e.SubPart != null); errorInfo.Description = string.Format(CultureInfo.CurrentUICulture, ValidationResources.Pkg_ExtendedPartIsOpenXmlPart, GetPartUri(e.SubPart)); break; case "Pkg_DataPartReferenceIsNotAllowed": Debug.Assert(e.DataPartReferenceRelationship != null); name = e.Part != null?GetPartNameAndUri(e.Part) : documentName; errorInfo.Description = String.Format(CultureInfo.CurrentUICulture, ValidationResources.Pkg_PartIsNotAllowed, name, e.DataPartReferenceRelationship.Uri); break; case "Pkg_InvalidContentTypePart": // won't get this error. default: Debug.Assert(false, "Invalid package validation event."); break; } if (e.Part != null) { errorInfo.Part = e.Part; errorInfo.Path = new XmlPath(e.Part); } errorInfo.RelatedPart = e.SubPart; context.AddError(errorInfo); } }
public void PackageValidateTest() { using (var stream = new MemoryStream()) { using (var doc = WordprocessingDocument.Create(stream, WordprocessingDocumentType.Document)) { doc.AddMainDocumentPart(); var document = doc.MainDocumentPart.Document = new Document(); document.Save(); doc.MainDocumentPart.AddNewPart<StyleDefinitionsPart>(); var styles = doc.MainDocumentPart.StyleDefinitionsPart.Styles = new Styles(); styles.Save(); // should no exception doc.Validate(null); // add new O14 part doc.MainDocumentPart.AddNewPart<StylesWithEffectsPart>(); Assert.IsType(typeof(StylesWithEffectsPart), doc.MainDocumentPart.StylesWithEffectsPart); // should no exception doc.Validate(null); // use default DefaultValidationEventHandler( ) which throw an exception OpenXmlPackageValidationSettings actualValidationSettings; actualValidationSettings = new OpenXmlPackageValidationSettings(); actualValidationSettings.EventHandler += new EventHandler<OpenXmlPackageValidationEventArgs>(( sender, e) => { OpenXmlPackageException exception = new OpenXmlPackageException(ExceptionMessages.ValidationException); exception.Data.Add("OpenXmlPackageValidationEventArgs", e); throw exception; }); // should no exception doc.Validate(actualValidationSettings, FileFormatVersions.Office2010); } } }