/// <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);
            }
        }
Example #2
0
#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);

                }
            }
        }