Проверка XML с помощью схемы XSD без изменения XML с использованием C # - PullRequest
2 голосов
/ 06 мая 2010

У меня есть XML-файл без схемы в XML, и мне нужно проверить XML по схеме XSD.Я видел много примеров, когда вы вводите XSD в XML, а затем проверяете XML.Я не хочу менять XML, возможно ли проверить XML по схеме без изменения XML?

Ответы [ 3 ]

3 голосов
/ 06 мая 2010

Легко кодировать с несколькими строками в C #.

Я создал простую утилиту интерфейса командной строки, которая принимает два параметра: XML, XSD и выполняет проверку.

Вы можете скачать его здесь .

Вот основной код:

            // 1- Read XML file content
            reader = new XmlTextReader(XMLPath);

            // 2- Read Schema file content
            StreamReader SR = new StreamReader(XSDPath);

            // 3- Create a new instance of XmlSchema object
            XmlSchema Schema = new XmlSchema();
            // 4- Set Schema object by calling XmlSchema.Read() method
            Schema = XmlSchema.Read(SR,
                new ValidationEventHandler(ReaderSettings_ValidationEventHandler));

            // 5- Create a new instance of XmlReaderSettings object
            XmlReaderSettings ReaderSettings = new XmlReaderSettings();
            // 6- Set ValidationType for XmlReaderSettings object
            ReaderSettings.ValidationType = ValidationType.Schema;
            // 7- Add Schema to XmlReaderSettings Schemas collection
            ReaderSettings.Schemas.Add(Schema);

            // 8- Add your ValidationEventHandler address to
            // XmlReaderSettings ValidationEventHandler
            ReaderSettings.ValidationEventHandler +=
                new ValidationEventHandler(ReaderSettings_ValidationEventHandler);

            // 9- Create a new instance of XmlReader object
            XmlReader objXmlReader = XmlReader.Create(reader, ReaderSettings);


            // 10- Read XML content in a loop
            while (objXmlReader.Read())
            { /*Empty loop*/}
1 голос
/ 06 мая 2010

Предоставляйте ValidationEventHandler только в том случае, если вы хотите продолжить проверку документа после первой ошибки проверки. В противном случае просто сделайте это:

private bool ValidateDocument(string xmlFile, string xsdFile)
{
    XmlReaderSettings settings = new XmlReaderSettings{ValidationType 
      = ValidationType.Schema};
    settings.Schemas.Add(XmlSchema.Read(XmlReader.Create(xsdFile)));
    XmlReader reader = XmlReader.Create(xmlFile, settings);

    try
    {
        while(reader.Read());
        return true;
    }
    catch (XmlException ex) 
    {
        // XmlException indicates a validation error occurred.
        return false;
    }
}

Следующие ссылки предоставляют дополнительную информацию:

http://msdn.microsoft.com/en-us/library/1xe0740a.aspx

http://support.microsoft.com/kb/307379

1 голос
/ 06 мая 2010

Вы можете добавить схему в документ xml

doc.Schemas.Add(schema);

А затем подтвердите его

bool xmlvalid = true;
string lastXmlError = "";

doc.Validate(new System.Xml.Schema.ValidationEventHandler(
    delegate(object sender, System.Xml.Schema.ValidationEventArgs args)
    {
        if (args.Severity == System.Xml.Schema.XmlSeverityType.Error)
            {
                xmlvalid = false;
                lastXmlError = args.Message;
            }
    }));

if (!xmlvalid)
   //raise error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...