मान्य यह इस सवाल C# Get schema information when validating xmlकब्जा स्कीमा सूचना जब XDocument
हालांकि, मैं LINQ प्रयोजनों के लिए एक XDocument साथ काम कर रहा हूँ के समान है।
मैं CSV फ़ाइलों का एक सेट पढ़ रहा/विश्लेषण कर रहा हूं और एक्सएमएल में परिवर्तित कर रहा हूं, फिर एक्सएसडी स्कीमा के खिलाफ एक्सएमएल को मान्य कर रहा हूं।
मैं तत्व मानों से संबंधित विशिष्ट त्रुटियों को कैप्चर करना चाहता हूं, और अधिक उपयोगकर्ता के अनुकूल संदेश उत्पन्न करना चाहता हूं, और उन्हें उपयोगकर्ता को वापस देना ताकि इनपुट डेटा को सही किया जा सके। आउटपुट डेटा में जो आइटम मैं शामिल करना चाहता हूं उनमें से एक है कुछ स्कीमा जानकारी (जैसे कि संख्यात्मक प्रकार के लिए स्वीकार्य मूल्यों की सीमा)।
मेरे वर्तमान दृष्टिकोण (जो मैं बदलने के लिए खुला हूं) में, मैं स्कीमा जानकारी को छोड़कर मुझे जो भी चाहिए, उसे कैप्चर करने में सक्षम हूं।
मैंने SourceSchemaObject
को ValidationEventArgs
प्रमाणीकरण ईवेंट हैंडलर के तर्क में पहुंचने का प्रयास किया है, लेकिन यह हमेशा शून्य है। मैंने XElement के GetSchemaInfo
को भी आजमाया है और यह भी शून्य दिखता है।
मैं विशिष्ट सत्यापन त्रुटियों की पहचान करने के लिए RegEx का उपयोग कर रहा हूं, जिसे मैं कैप्चर करना चाहता हूं, और सत्यापन ईवेंट हैंडलर के प्रेषक तर्क के माध्यम से XElement से डेटा को पकड़ना।
private List<String> this.validationWarnings;
private XDocument xDoc;
private XmlSchemaSet schemas = new XmlSchemaSet();
public List<String> Validate()
{
this.validationWarnings = new List<String>();
// the schema is read elsewhere and added to the schema set
this.xDoc.Validate(this.schemas, new ValidationEventHandler(ValidationCallBack), true);
return validationWarnings
}
है और यहाँ: मैं एक XDocument को स्कीमा बदलने और हथियाने क्या मैं LINQ के माध्यम से की जरूरत के बारे में सोचा है, लेकिन यह मेरे लिए है कि एक बेहतर विकल्प होना चाहिए लगता है
यहाँ मेरे वर्तमान मान्य विधि है मेरी कॉलबैक विधि:
private void ValidationCallBack(object sender, ValidationEventArgs args)
{
var element = sender as XElement;
if (element != null)
{
// this is a just a placeholder method where I will be able to extract the
// schema information and put together a user friendly message for specific
// validation errors
var message = FieldValidationMessage(element, args);
// if message is null, then the error is not one one I wish to capture for
// the user and is related to an invalid XML structure (such as missing
// elements or incorrect order). Therefore throw an exception
if (message == null)
throw new InvalidXmlFileStructureException(args.Message, args.Exception);
else
validationWarnings.Add(message);
}
}
मेरी कॉलबैक विधि में var message = FieldValidationMessage(element, args);
लाइन बस एक प्लेसहोल्डर है और मौजूद नहीं है अभी तक इस विधि के इरादे 3 काम करने के लिए है:
args.Message
पर RegEx का उपयोग करके विशिष्ट सत्यापन त्रुटियों को पहचानें (यह पहले से ही काम करता है, मैं पैटर्न है कि मैं उपयोग करने की योजना का परीक्षण किया है)ले लो कि त्रुटि पैदा विशिष्ट XElement से संबंधित XDocument से विशेषता मान (जैसे मूल सीएसवी में पंक्ति और कॉलम संख्या)
स्कीमा जानकारी प्राप्त करें यदि यह उपलब्ध है तो फील्ड प्रकार और प्रतिबंध आउटपुट संदेश में जोड़े जा सकते हैं।