![](/img/trans.png)
[英]XmlSchemaValidationException.LineNumber and LinePosition are 0 when validating an Xml Schema with XDocument.Validate
[英]How to find invalid XML node in XDocument that is validated against a schema (XmlSchemaValidationException.SourceObject is null)
我有一個XDocument
我驗證XML模式。 當XDocument
無效時,我需要找到無效的XML節點,以便用戶可以輕松導航到我的應用程序中的相應位置(例如,通過雙擊消息網格上的消息)。
為此,我使用System.Xml.Schema.Validate()
擴展方法。 Validate()方法的第二個參數是System.Xml.ValidationEventHandler
,它在每個無效的XML元素上調用。 它傳遞一個System.Xml.ValidationEventArgs
。 ValidationEventArgs.Exception
可以轉換為System.Xml.Schema.XmlSchemaValidationException
。 現在XmlSchemaValidationException
有一個屬性SourceObject
,我期望它保存對無效XML節點的引用。 不幸的是它總是空的。
以下代碼段說明了我的用法:
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
}
});
驗證本身可以正常工作,但我無法在無效節點上獲得引用。 奇怪的是,同樣的方法適用於System.Xml.XmlDocument
,但遺憾的是我必須在此上下文中使用XDocument
。
有沒有人有一個建議如何在XDocument
找到無效節點?
好的,我有答案。 無效節點是事件處理程序的“發送者”本身。 它可以轉換為XContainer,XElement,...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.