2013-01-06 9 views
5

मैं एक ऐसा एप्लीकेशन लिख रहा हूं जो एक्सएमएल फ़ाइल को पार करता है।फ़ाइल नाम के बजाय XmlReader सेटिंग्स को स्कीमा जोड़ना (एम्बेडेड संसाधन) स्कीमा?

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.Schemas.Add(null, "./xml/schemas/myschema.xsd"); 
settings.ValidationType = ValidationType.Schema; 
XmlReader reader = XmlReader.Create(xmlFile, settings); 
XmlDocument document = new XmlDocument(); 
document.Load(reader); 
ValidationEventHandler eventHandler = new ValidationEventHandler(settings_ValidationEventHandler); 
document.Validate(eventHandler); 

ध्यान दें कि पैरामीटर */xml/स्कीमा/myschema.xsd "के लिए पथ है:। मैं जो मैं इसे deserialize की कोशिश कर रहा से पहले सत्यापन के लिए XML का उपयोग स्कीमा (.xsd) फ़ाइल है। प्रोग्राम निष्पादन के सापेक्ष xsd।

मैं फ़ाइल नाम/पथ का उपयोग नहीं करना चाहता, इसके बजाय मैं अपने प्रोजेक्ट में एम्बेडेड संसाधन के रूप में .xsd फ़ाइल को संकलित करना चाहता हूं (मैंने पहले से ही .xsd फ़ाइल जोड़ दी है और बिल्ड सेट किया है एम्बेडेड संसाधन के लिए क्रिया)

मेरा प्रश्न है .... मैं एम्बेडेड संसाधन स्कीमा को XmlReaderSettings स्कीमा सूची में कैसे जोड़ूं? 4 ओवरलोडेड विधियां हैं सेटिंग्स। क्रिसमस। जोड़ें लेकिन उनमें से कोई भी एक तर्क के रूप में एक एम्बेडेड संसाधन नहीं लेता है। वे सभी स्कीमा फ़ाइल के लिए रास्ता लेते हैं।

मैंने लेबल छवियों को गतिशील रूप से सेट करने के लिए अतीत में एम्बेडेड संसाधनों का उपयोग किया है, इसलिए मैं एम्बेडेड संसाधनों का उपयोग करने से कुछ हद तक परिचित हूं।

System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly(); 
Stream myStream = myAssembly.GetManifestResourceStream(resourceName); 

मैं यह सोचते हैं कि एम्बेडेड .xsd भी एक धारा के रूप में तो यह संकरी पढ़ी जाएंगी: मेरे अन्य कोड को देखते हुए यह क्या मैं अंत में खत्म एक स्ट्रीम कि सामग्री होती है साथ की तरह दिखता है मेरे सवाल को थोड़ा नीचे। जब मैं स्कीमा युक्त धारा का संदर्भ करता हूं और फ़ाइल नाम नहीं करता हूं तो मैं XmlReaderSettings में स्कीमा कैसे जोड़ूं?

+0

, हम डॉन उपयोग नहीं करें "धन्यवाद", या "किसी भी मदद की सराहना की", या हस्ताक्षर [so] पर। देखें "[चाहिए 'हाय', 'धन्यवाद,' टैगलाइन, और नमस्कार पदों से हटा दिए जाएंगे?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -से-पोस्ट-पोस्ट-पोस्ट) –

+0

ठीक नहीं कोई समस्या नहीं। –

उत्तर

13

आप Add() अधिभार कि अपने दूसरे पैरामीटर के रूप में एक XmlReader लेता है का उपयोग कर सकते हैं:

Assembly myAssembly = Assembly.GetExecutingAssembly(); 
using (Stream schemaStream = myAssembly.GetManifestResourceStream(resourceName)) { 
    using (XmlReader schemaReader = XmlReader.Create(schemaStream)) { 
    settings.Schemas.Add(null, schemaReader); 
    } 
} 

या आप स्कीमा पहले लोड कर सकते हैं और फिर इसे जोड़ें: मंच साइटों के विपरीत

Assembly myAssembly = Assembly.GetExecutingAssembly(); 
using (Stream schemaStream = myAssembly.GetManifestResourceStream(resourceName)) { 
    XmlSchema schema = XmlSchema.Read(schemaStream, null); 
    settings.Schemas.Add(schema); 
} 
संबंधित मुद्दे