Mã sau đây giúp tôi xác thực tệp XML bằng lược đồ XSD.Xác thực Xml bằng lược đồ XSD
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, xsdFilePath);
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler);
XmlDocument document = new XmlDocument();
document.Load(xmlFilePath);
XmlReader rdr = XmlReader.Create(new StringReader(document.InnerXml), settings);
while (rdr.Read())
{
}
isValid = true;
ValidationEventHandler cũng cho tôi biết lỗi là gì, nhưng không cho tôi biết 'where' hoặc 'trên dòng nào'. Có cách nào để lấy số dòng nơi XML không được xác nhận không?
+1 Hoàn toàn bị mất e.Exception.LineNumber và e.Exception.LinePosition. – Elroy
Tại sao bạn đặt mã này vào XmlDocument lúc đầu? Nó dường như không làm gì cả. –
@JeremyHolovacs đúng, nó chỉ là một bản sao của một trong những câu trả lời của diễn đàn năm 2007 (http://www.devnewsgroups.net/dotnetframework/t43762-catching-line-numbers-with-xmldocument-validate.aspx), và nhận xét sau đã đề cập: "Nó hoạt động khi tôi xóa bỏ' XmlDocument' và thay thế 'XmlNodeReader' bằng ' StringReader' " – VonC