2013-01-06 18 views
5

Bir Xml dosyasını ayrıştıran bir uygulama yazıyorum. . Parametre */xml/şemalar/myschema.xsd" yolunu olduğunuDosya Adı Yerine XmlReaderSettings Ekleme (Gömülü Kaynak) Şeması?

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); 

Not: Ben bu serisini denemeden önce Xml doğrulamak için kullanın şema (.xsd) dosyası var. Program yürütmeye göre xsd

Dosya adlarını/yollarını kullanmak istemiyorum, bunun yerine .xsd dosyasını projemde yerleşik bir kaynak olarak derlemeyi tercih ediyorum (.xsd dosyasını zaten ekledim ve Oluştur'u Gömülü Kaynak Eylemi

Sorum şu ki ... Embedded Resource şemasını XmlReaderSettings şema listesine nasıl ekleyebilirim? settings.Schemas.Add ancak bunların hiçbiri bağımsız değişken olarak bağımsız bir kaynak alır. Hepsi şema dosyasına giden yolu alırlar.

Etiket görüntülerini dinamik olarak ayarlamak için geçmişte gömülü kaynaklar kullandım, bu nedenle yerleşik kaynakları kullanma konusunda biraz aşina oldum.

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

Ben gömülü .Xsd de bu yüzden bu daraltır bir akışı olarak okunabilir olacağını varsayıyorum: benim diğer kod baktığımızda bu içeriğe sahip bir Akış olduğu ile Sonunda sonunda neyi benziyor sorumu biraz aştı. Şema içeren bir dosyaya başvurduğumda ve dosya adını değil, şemayı XmlReaderSettings'e nasıl eklerim? eklemek sonra ilk şema yük ve

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

Veya:

+0

forum sitelerinin aksine biz don "Teşekkürler" veya "Takdir edilen herhangi bir yardım" veya [o] üzerindeki imzaları kullanmayın. "['Merhaba', 'teşekkürler', 'sloganları ve selamlar yazılardan kaldırılmalı mı?] Bölümüne bakın. (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be –

+0

Tamam, sorun değil. –

cevap

13

Bunu ikinci parametre olarak bir XmlReader alır Add() aşırı kullanabilirsiniz

Assembly myAssembly = Assembly.GetExecutingAssembly(); 
using (Stream schemaStream = myAssembly.GetManifestResourceStream(resourceName)) { 
    XmlSchema schema = XmlSchema.Read(schemaStream, null); 
    settings.Schemas.Add(schema); 
}