Проверка XML против XSD, на который ссылаются, в C#

После небольшого разговора в комментариях я думаю, что это хорошее решение:

// YourModel.php

// Add this line of you want the "parents" property to be populated all the time.
protected $appends = ['parents'];

public function getParentsAttribute()
{
    $collection = collect([]);
    $parent = $this->parent;
    while($parent) {
        $collection->push($parent);
        $parent = $parent->parent;
    }

    return $collection;
}

Затем вы можете найти своих родителей, используя:

Как отметил Николай Киселев https://stackoverflow.com / a / 55103589/1346367 Вы также можете комбинировать это с этим, чтобы сохранить несколько запросов:

protected $with = ['parent.parent.parent'];
// or inline:
YourModel::find(123)->with(['parent.parent.parent']);

Это предварительно загружает родителя при загрузке объекта. Если вы решите не использовать это, родительский (загружается) загружается, как только вы позвоните $yourModel->parent.

158
задан xav 10 April 2014 в 17:41
поделиться

2 ответа

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

using System.Xml;
using System.Xml.Schema;
using System.IO;

public class ValidXSD
{
    public static void Main()
    {

        // Set the validation settings.
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationType = ValidationType.Schema;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
        settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
        settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);

        // Create the XmlReader object.
        XmlReader reader = XmlReader.Create("inlineSchema.xml", settings);

        // Parse the file. 
        while (reader.Read()) ;

    }
    // Display any warnings or errors.
    private static void ValidationCallBack(object sender, ValidationEventArgs args)
    {
        if (args.Severity == XmlSeverityType.Warning)
            Console.WriteLine("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
        else
            Console.WriteLine("\tValidation error: " + args.Message);

    }
}
164
ответ дан Kiquenet 23 November 2019 в 21:40
поделиться

У меня был такой вид автоматической проверки в VB, и вот как я это сделал (преобразовал в C #):

XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags = settings.ValidationFlags |
                           Schema.XmlSchemaValidationFlags.ProcessSchemaLocation;
XmlReader XMLvalidator = XmlReader.Create(reader, settings);

Затем я подписался на событие settings.ValidationEventHandler во время чтения файла.

13
ответ дан saluce 23 November 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: