Tôi đang cố xác thực phân đoạn Xml bằng cách sử dụng Lược đồ Xml với phương thức mở rộng XDocument.Validate. Bất cứ khi nào một mảnh Xml không hợp lệ được sử dụng các đám cháy ValidationEventHandler đúng cách, tuy nhiên cả hai thuộc tính linenumber và LinePosition của XmlSchemaValidationException là 0.XmlSchemaValidationException.LineNumber và LinePosition là 0 khi xác nhận hợp lệ Xml Schema với XDocument.Validate
private bool Validate(XDocument doc)
{
bool isValid = true;
List<string> validationErrors = new List<string>();
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(null, "MyCustomSchema.xsd");
doc.Validate(schemas, (sender, args) =>
{
validationErrors.Add(String.Format("{0}: {1} [Ln {2} Col {3}]",
args.Severity,
args.Exception.Message,
args.Exception.LineNumber,
args.Exception.LinePosition));
isValid = false;
}, false);
return isValid;
}
Mục tiêu của tôi trong ví dụ trên là sử dụng validationErrors cho thông báo cho người dùng là tại sao xác thực không thành công. Tuy nhiên, khi phương pháp này được sử dụng, LineNumber và LinePosition đều là 0.
Đoạn mã có vẻ đơn giản và dường như hoạt động như mong đợi về xác thực đối với cả đoạn Xml hợp lệ và không hợp lệ.
Cảm ơn trước!
Theo như tôi có thể thấy XmlSchemaValidator được instantiated chỉ sử dụng một DummyPostion nội bộ và tôi không thấy một tùy chọn để có được một thực hiện tốt hơn tiêm. – rene