Проверка Xml с помощью схемы XSD

Это связано с эффектом перемещения вашей переменной VAR внутри обработчика событий. Таким образом, это

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Document</title>
</head>
<body>
    <script>
     const VAR = 3;
     document.onclick = function(event) {
         console.log(VAR); // undefined, VAR in so-called Temporary Dead Zone
         var VAR = 2;
         console.log(VAR); // 2
     };
    </script>
</body>
</html>

эквивалентно этому

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Document</title>
</head>
<body>
    <script>
     const VAR = 3;
     document.onclick = function(event) {
         var VAR; // VAR declared but NOT defined, so VAR again in TDZ
         console.log(VAR); // undefined
         VAR = 2; // VAR defined
         console.log(VAR); // 2
     };
    </script>
</body>
</html>

Возможно, вы захотите прочитать больше о подъемах, объявлениях var Old-School и TDZ. - С уважением, М.

11
задан Davide Piras 14 November 2011 в 19:02
поделиться

2 ответа

Разве это не сделало бы то, что Вы после?

Создайте XmlReaderSettings возразите и включите предупреждения через тот объект.

К сожалению, кажется, нет никакого способа передать Ваше собственное XmlReaderSettings объект к XmlDocument.Validate().
Вместо этого можно использовать проверку XmlReader и XmlNodeReader проверить существующее XmlDocument (использующий a XmlNodeReader с StringReader вместо XmlDocument)

XmlDocument x = new XmlDocument();
x.LoadXml(XmlSource);

XmlReaderSettings settings = new XmlReaderSettings();
settings.CloseInput = true;     
settings.ValidationEventHandler += Handler;

settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(null, ExtendedTreeViewSchema);
settings.ValidationFlags =
     XmlSchemaValidationFlags.ReportValidationWarnings |
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ProcessInlineSchema |
XmlSchemaValidationFlags.ProcessSchemaLocation ;

StringReader r = new StringReader(XmlSource);

using (XmlReader validatingReader = XmlReader.Create(r, settings)) {
        while (validatingReader.Read()) { /* just loop through document */ }
}

И обработчик:

private static void Handler(object sender, ValidationEventArgs e)
{
        if (e.Severity == XmlSeverityType.Error || e.Severity == XmlSeverityType.Warning)
          System.Diagnostics.Trace.WriteLine(
            String.Format("Line: {0}, Position: {1} \"{2}\"",
                e.Exception.LineNumber, e.Exception.LinePosition, e.Exception.Message));
}
28
ответ дан 3 December 2019 в 02:41
поделиться

ValidationEventArgs. Сообщение включает строку/столбец в свой текст.

ValidationEventArgs. Исключение имеет поля для строки и столбца.

3
ответ дан 3 December 2019 в 02:41
поделиться
Другие вопросы по тегам:

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