Tôi có một XDocument
mà tôi xác thực dựa vào một lược đồ XML. Khi XDocument
không hợp lệ, tôi cần phải tìm các nút XML không hợp lệ để người dùng có thể dễ dàng điều hướng đến vị trí tương ứng trong ứng dụng của tôi (ví dụ: bằng cách nhấp đúp vào thư trên lưới thư).Cách tìm nút XML không hợp lệ trong XDocument được xác nhận hợp lệ đối với một lược đồ (XmlSchemaValidationException.SourceObject là null)
Tôi sử dụng phương pháp mở rộng System.Xml.Schema.Validate()
cho mục đích đó. Đối số thứ hai của phương thức Validate() là một System.Xml.ValidationEventHandler
được gọi trên mọi phần tử XML không hợp lệ. Nó vượt qua một System.Xml.ValidationEventArgs
. Các ValidationEventArgs.Exception
có thể được đúc thành System.Xml.Schema.XmlSchemaValidationException
. Bây giờ, XmlSchemaValidationException
có thuộc tính SourceObject
mà tôi dự kiến sẽ giữ tham chiếu đến nút XML không hợp lệ. Thật không may nó luôn luôn là null.
Đoạn sau đây minh họa việc sử dụng của tôi:
XDocument doc = XDocument.Load(@"c:\temp\booksSchema.xml");
// Create the XmlSchemaSet class.
XmlSchemaSet sc = new XmlSchemaSet();
// Add the schema to the collection.
sc.Add("urn:bookstore-schema", @"c:\temp\books.xsd");
// Validate against schema
doc.Validate(sc, delegate(object sender, ValidationEventArgs e)
{
XmlSchemaValidationException ve = e.Exception as XmlSchemaValidationException;
if (ve != null)
{
object errorNode = ve.SourceObject;
// ve.SourceObject is always null
}
});
Việc xác nhận bản thân hoạt động chính xác, nhưng tôi không thể có được một tài liệu tham khảo trên các nút không hợp lệ. Kỳ lạ thay, cách tiếp cận tương tự hoạt động tốt cho System.Xml.XmlDocument
, nhưng tiếc là tôi phải làm việc với XDocument
trong ngữ cảnh này.
Có ai có đề xuất về cách nút không hợp lệ có thể được tìm thấy trong XDocument
không?