簡體   English   中英

如何在XDocument中找到針對模式驗證的無效XML節點(XmlSchemaValidationException.SourceObject為null)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM