protected static void ValidateXmlAndThrowIfInvalid(string xml)
        {
            var xsdValidator = new XsdValidator();

            xsdValidator.Validate(xml);

            string validationWarnings;

            xsdValidator.Validate(xml, out validationWarnings);

            if (!string.IsNullOrEmpty(validationWarnings))
            {
                throw new InvalidXmlException(validationWarnings);
            }
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            IXsdValidator xsdValidator = new XsdValidator();
            var           xsdContent   = XmlTestData.GetXsdMarkup();

            {
                Console.WriteLine("// Demo: Validate a valid XML file against an XSD schema");
                string validXmlContent  = XmlTestData.GetValidXmlContent();
                var    validationResult = xsdValidator.Validate(validXmlContent, xsdContent);
                Console.WriteLine($"validationResult.IsValid: {validationResult.IsValid}");
                Console.WriteLine($"validationResult.Errors ({validationResult.Errors.Count()}):\n{FormatValidationErrors(validationResult)}");
                Console.WriteLine();
            }

            {
                Console.WriteLine("// Demo: Validate an invalid XML file against an XSD schema");
                string invalidXmlContent = XmlTestData.GetInvalidXmlContent();
                var    validationResult  = xsdValidator.Validate(invalidXmlContent, xsdContent);
                Console.WriteLine($"validationResult.IsValid: {validationResult.IsValid}");
                Console.WriteLine($"validationResult.Errors ({validationResult.Errors.Count()}):\n{FormatValidationErrors(validationResult)}");
                Console.WriteLine();
            }

            Console.WriteLine("// Demo: Serialize/deserialize string to XML");
            const string inputString = "This is a test string";

            Console.WriteLine($"inputString:\n{inputString}");
            Console.WriteLine();

            var serialized = XmlSerializerHelper.Current.SerializeToXml(inputString);

            Console.WriteLine($"SerializeToXml:\n{serialized}");
            Console.WriteLine();

            var deserialized = XmlSerializerHelper.Current.DeserializeFromXml <string>(serialized);

            Console.WriteLine($"DeserializeFromXml:\n{deserialized}");
            Console.WriteLine();

            Console.ReadKey();
        }
Beispiel #3
0
        public void ShouldValidateXsdSchemaSuccessfully()
        {
            // Arrange
            string xmlContent = XmlTestData.GetValidXmlContent();
            string xsdContent = XmlTestData.GetXsdMarkup();

            IXsdValidator xsdValidator = new XsdValidator();

            // Act
            var validationResult = xsdValidator.Validate(xmlContent, xsdContent);

            // Assert
            validationResult.IsValid.Should().BeTrue();
        }
Beispiel #4
0
        public void ShouldFailToValidateXsdSchema()
        {
            // Arrange
            string xmlContent = XmlTestData.GetInvalidXmlContent();
            string xsdContent = XmlTestData.GetXsdMarkup();

            IXsdValidator xsdValidator = new XsdValidator();

            // Act
            var validationResult = xsdValidator.Validate(xmlContent, xsdContent);

            // Assert
            validationResult.IsValid.Should().BeFalse();
            validationResult.Errors.Should().HaveCount(1);
            validationResult.Errors.ElementAt(0).Message.Should().Be("The element 'Root' has invalid child element 'Child3'. List of possible elements expected: 'Child2'.");
        }
Beispiel #5
0
        private static int Main(string[] args)
        {
            Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

            var showHelp    = false;
            var dryRun      = false;
            var listSchemas = false;

            var filePath = default(string);
            var xsdPath  = "Resources/Schemas";
            var verbose  = false;

            var p = new OptionSet
            {
                { "Help" },
                { "h|help", "Display this message", x => showHelp = true },
                { "d|dry-run", "Test how parameters are parsed", x => dryRun = true },
                { "l|list-schemas", "List supported XSD-schemas", x => listSchemas = true },

                { "Validation" },
                { "f|file=", "(Required) Path to file", x => filePath = x },
                { "x|xsd-path=", "(Optional) Path to XSD-schemas", x => xsdPath = x },
                { "v|verbose", "(Optional) (Resource intensive) Detailed output", x => verbose = true }
            };

            var list = p.Parse(args);

            if (list.Count > 0)
            {
                Console.WriteLine($"Unknown arguments: {string.Join(", ", list)}\n");
                p.WriteOptionDescriptions(Console.Out);
                Console.WriteLine();
                return(1);
            }

            if (showHelp)
            {
                p.WriteOptionDescriptions(Console.Out);
                Console.WriteLine();
                return(0);
            }

            if (dryRun)
            {
                Console.WriteLine("Parsed parameters:");
                Console.WriteLine($"- file: {Path.GetFullPath(filePath)}");
                Console.WriteLine($"- xsd-path: {Path.GetFullPath(xsdPath)}");
                Console.WriteLine($"- verbose: {verbose}");
                Console.WriteLine();
                return(0);
            }

            var schemas = SchemaLoader.LoadDirectory(xsdPath);

            if (listSchemas)
            {
                var namespaces = schemas.Schemas()
                                 .OfType <XmlSchema>()
                                 .Select(s => s.TargetNamespace)
                                 .OrderBy(ns => ns);

                var sb = new StringBuilder();
                sb.AppendLine("Supported xsd-schemas:");
                foreach (var ns in namespaces)
                {
                    sb
                    .Append(" - ")
                    .Append(ns)
                    .AppendLine();
                }

                Console.WriteLine();
                Console.WriteLine(sb);
                return(0);
            }

            if (filePath == default)
            {
                Console.WriteLine("ERROR: A file must be specified");
                return(1);
            }

            // todo more error handling
            // todo better output

            if (verbose)
            {
                bool hasError;
                try
                {
                    var xDoc = XDocument.Load(filePath);
                    hasError = XsdValidator.Validate(xDoc, schemas, Console.Out);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    hasError = true;
                }

                return(hasError
                    ? 1
                    : 0);
            }

            try
            {
                XsdValidator.ValidateFile(filePath, schemas, true);
            }
            catch (AggregateException aex)
            {
                var sb = new StringBuilder();
                sb.AppendLine("Error in xml:");
                foreach (var iex in aex.InnerExceptions)
                {
                    sb.Append(" - ")
                    .AppendLine(iex.Message);
                }

                Console.WriteLine(sb);
                return(1);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error in xml {ex.Message}");
                return(1);
            }

            return(0);
        }