1

このコードは Xml を適切に検証していません。間違いを見つけてください....無効な xml で実行しても、エラーは発生しません。

using System.Xml;

namespace XmlTryProject
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            XmlReaderSettings readSettings = new XmlReaderSettings();
            readSettings.ValidationType = ValidationType.Schema;
            readSettings.Schemas.Add(null,
     @"C:\Visual Studio 2010\Projects\XmlTry \XmlTryProject\EmployeeXSD.xsd");

            readSettings.ValidationEventHandler +=
                new System.Xml.Schema.ValidationEventHandler(Validater);

            XmlReader xReader = XmlReader.Create(
     @"C:\Visual Studio 2010\Projects\XmlTry\XmlTryProject\EmployeeXML.xml",
                readSettings);

            while (xReader.Read())
            {
                if (xReader.NodeType == XmlNodeType.Element)
                {
                    Console.WriteLine(xReader.Name);
                }
            }
        }

        public static void Validater(object sender,
                             System.Xml.Schema.ValidationEventArgs args)
        {
            Console.WriteLine(args.Message);
        }
    }
}
4

2 に答える 2

3

ValidationFlagsを忘れたようです:

readSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
readSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
readSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
于 2012-12-21T11:21:59.277 に答える
0

これは、linq to xml を使用する簡単な方法です。
メソッド ValidateXmlFile は、その使用方法のサンプルです。

private static void ValidateXmlFile()
{
    using (var xmlFile = File.OpenRead("networkshares.xml"))
    using (var xmlSchemaFile = File.OpenRead("networkshares.xsd"))
    {
        ValidateXml("netuseperdomain.networkshares", xmlSchemaFile, xmlFile);
    }
}

public static void ValidateXml(string targetNamespace, Stream xmlSchema, Stream xml)
{
    var xdoc = XDocument.Load(xml);
    var schemas = new XmlSchemaSet();
    schemas.Add(targetNamespace, new XmlTextReader(xmlSchema));

    xdoc.Validate(schemas, (sender, e) =>
    {
        throw new Exception(e.Message);
    });
}
于 2012-12-21T11:24:29.663 に答える