Это связано с эффектом перемещения вашей переменной 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. - С уважением, М.
Разве это не сделало бы то, что Вы после?
Создайте
XmlReaderSettings
возразите и включите предупреждения через тот объект.К сожалению, кажется, нет никакого способа передать Ваше собственное
XmlReaderSettings
объект кXmlDocument.Validate()
.
Вместо этого можно использовать проверкуXmlReader
иXmlNodeReader
проверить существующееXmlDocument
(использующий aXmlNodeReader
с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));
}
ValidationEventArgs. Сообщение включает строку/столбец в свой текст.
ValidationEventArgs. Исключение имеет поля для строки и столбца.