Çalışma zamanında okuduğum xml dosyalarım, çalışma zamanında xsd dosyasına karşı xml'yi doğrulamak mümkün müdür? C#Çalışma zamanında kod kullanarak xsd'ye karşı xml'yi doğrulamak mümkün mü?
cevap
bu deneyin:
public void ValidateXmlDocument(
XmlReader documentToValidate, string schemaPath)
{
XmlSchema schema;
using (var schemaReader = XmlReader.Create(schemaPath))
{
schema = XmlSchema.Read(schemaReader, ValidationEventHandler);
}
var schemas = new XmlSchemaSet();
schemas.Add(schema);
var settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas = schemas;
settings.ValidationFlags =
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += ValidationEventHandler;
using (var validationReader = XmlReader.Create(documentToValidate, settings))
{
while (validationReader.Read())
{
}
}
}
private static void ValidationEventHandler(
object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Error)
{
throw args.Exception;
}
Debug.WriteLine(args.Message);
}
Umut kullanarak bu bağlantı yardımcı olur:
bağlantı iyi görünüyor, ama ben örnek kullanılmıyor bir XmlValidatingReader kullanıyor ettim. Davranışı tanımlamak için bazı Doğrulama özelliklerini içeren XmlReader ve XmlReaderSettings stoklarına bakın. – STW
Ben kodu çok ANLADIM! Benim testlerde bu kullanın:
public static bool IsValid(XElement element, params string[] schemas)
{
XmlSchemaSet xsd = new XmlSchemaSet();
XmlReader xr = null;
foreach (string s in schemas)
{ // eh, leak 'em.
xr = XmlReader.Create(
new MemoryStream(Encoding.Default.GetBytes(s)));
xsd.Add(null, xr);
}
XDocument doc = new XDocument(element);
var errored = false;
doc.Validate(xsd, (o, e) => errored = true);
if (errored)
return false;
// If this doesn't fail, there's an issue with the XSD.
XNamespace xn = XNamespace.Get(
element.GetDefaultNamespace().NamespaceName);
XElement fail = new XElement(xn + "omgwtflolj/k");
fail.SetAttributeValue("xmlns", xn.NamespaceName);
doc = new XDocument(fail);
var fired = false;
doc.Validate(xsd, (o, e) => fired = true);
return fired;
}
Bu seferki (düzeneği içindeki dosya kaynaklarını) dizeleri olarak şemalarında alır ve bir şema kümesine ekler. Doğrularım ve geçerli değilse yanlış döndürüyorum.
xml'nin geçersiz olmadığı anlaşılırsa, şemalarımın vidalanmadığından emin olmak için negatif bir kontrol yapıyorum. Sağlam garanti edilmez, ama şemalarımda hata bulmak için bunu kullandım.
"XmlSchema.Read" yöntemini kullanmayı deneyebilirsiniz, çünkü şema ayrıştırılırken doğrulanabilir. –
kod için teşekkürler :) – BigOmar
basit bir çözüm ..
try
{
XmlReaderSettings Xsettings = new XmlReaderSettings();
Xsettings.Schemas.Add(null, "personDivideSchema.xsd");
Xsettings.ValidationType = ValidationType.Schema;
XmlDocument document = new XmlDocument();
document.Load("person.xml");
XmlReader reader = XmlReader.Create(new StringReader(document.InnerXml), Xsettings);
while (reader.Read());
}
catch (Exception e)
{
Console.WriteLine(e.Message.ToString());
}
- 1. ASHX sözdizimi hatalarını çalışma zamanında doğrulamak mümkün mü?
- 2. Kotlin'de, çalışma zamanında delegasyonu değiştirmek mümkün mü?
- 3. Çalışma zamanında ViewPager'da sekme eklemek/çıkarmak mümkün mü?
- 4. Bir nesne çalışma zamanında olup olmadığını söylemek mümkün mü?
- 5. Mockito'yu kullanarak rastgele etkileşimi kompakt bir şekilde doğrulamak mümkün mü?
- 6. Çalışma zamanında
- 7. Kodları kullanarak derleme zamanında kod oluşturma
- 8. javafx çalışma zamanında css değiştirme
- 9. C# Yansımayı Kullanarak Çalışma Zamanında Döküm Tipi
- 10. Çekirdeği çalışma zamanında değiştirin
- 11. Yansıma.emit kullanarak çalışma zamanında bir yöntem oluşturma
- 12. Çalışma zamanında XAML yükleniyor?
- 13. Çalışma zamanında sql_mode nasıl değiştirilir
- 14. Geçiş Değeri Çalışma zamanında belirlendi C#
- 15. Çalışma zamanında aynı işlevi yeniden yürütme
- 16. Çalışma zamanında menü değiştirme
- 17. Çalışma zamanında görüntü ekleme
- 18. çalışma zamanında dinamik
- 19. Derleme zamanında sayı faktöryelerini hesaplamak mümkün mü, ancak
- 20. çalışma zamanında hata ayıklama günlüğü düzeyini ayarlamak için açısal olarak mümkün mü?
- 21. Tüm seçici aramaları yakalamak ve onları çalışma zamanında yönlendirmek mümkün mü
- 22. OpenCV basit bir kod başarıyla derler ama çalışma zamanında çöküyor
- 23. Android'de çalışma zamanında XML kaynaklarını nasıl oluştururum?
- 24. Dinamik RSL URL'leri. Mümkün mü?
- 25. Çalışma zamanında Clojure "sabitlerini" ayarlama
- 26. Çalışma zamanında Ehcache önbellek boyutu
- 27. Bir GridView sütununu ASP.Net'de çalışma zamanında gizleme
- 28. Java'da çalışma zamanında deve rotası ekleyin
- 29. knockout.js çalışma zamanında yükleme şablonları
- 30. Yapılandırma zamanında kod biçimlendirmesi
Bu en hızlı olanı kullanıyorum. –