मेरे पास XDocument
है जो मैं एक XML स्कीमा के विरुद्ध मान्य करता हूं। जब XDocument
अमान्य है तो मुझे अमान्य XML नोड्स को खोजने की आवश्यकता है ताकि उपयोगकर्ता आसानी से मेरे एप्लिकेशन में संबंधित स्थान पर जा सके (उदा। संदेश ग्रिड पर किसी संदेश को डबल-क्लिक करके)।XDocument में अमान्य XML नोड को कैसे खोजें जो स्कीमा के खिलाफ मान्य है (XmlSchemaValidationException.SourceObject शून्य है)
मैं उस उद्देश्य के लिए System.Xml.Schema.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
में अमान्य नोड कैसे पाया जा सकता है?