Validace XML   zodpovězená otázka

C#, XML, .NET

Ahoj,

potřeboval bych pomoci s validací xml souboru proti xsd. Použil jsem třídu XmlValidatingReader

a pokud chci zjistit pouze to, zda je dokument validní nebo který element neodpovídá, je to ok.

Já bych ale potřeboval, aby mi validátor oznámil i důvod, proř není daný element validní, např. že zadaná hodnota je mimo povolený rámec, že se očekává jiný datový typ apod. Víte někdo jak na to?

Předem díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím... tímto způsobem by to mělo být OK :-)

var xmlSettings = new XmlReaderSettings();
xmlSettings.Schemas.Add(null, xsdFilePath);
xmlSettings.ValidationType = ValidationType.Schema;
xmlSettings.ValidationEventHandler += (s, a) =>
{
   //...
};

var reader = XmlReader.Create(source, xmlSettings);

v Případě chyby je tato informace v obsluze události ValidationEventHandler...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

asi jsem to špatně pochopil, protože událost se vůbec nezavolá. Opsal jsem celý kód

a doplnil správné cesty k xml a xsd. Je potřeba ještě něco přidat?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano... je potřeba něco přidat. Tady je tedy celý kód, který občas používám:

var xmlSettings = new XmlReaderSettings();
xmlSettings.Schemas.Add(null, xsdFilePath);
xmlSettings.ValidationType = ValidationType.Schema;
xmlSettings.ValidationFlags = XmlSchemaValidationFlags.AllowXmlAttributes |
                                XmlSchemaValidationFlags.ReportValidationWarnings |
                                XmlSchemaValidationFlags.ProcessIdentityConstraints |
                                XmlSchemaValidationFlags.ProcessInlineSchema |
                                XmlSchemaValidationFlags.ProcessSchemaLocation; 
xmlSettings.ValidationEventHandler += (s, a) =>
{

};


using (var reader = XmlReader.Create(xmlFilePath, xmlSettings))
{
    var document = new XmlDocument();
    document.Load(reader);
}

událost je vyvolána, pokud nastane chyba nebo varování (dle nastavení ValidationFlags). Pokud je dokument dle xsd validní, není událost vyvolána.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky, už to funguje :-).

Lze se nějak dostat k hodnotám xsd šablony? Myslím v tom smyslu, že současný validátor oznámí

že hodnota "xxx" neodpovídá vzoru.

Xsd šablona obsahuje např. toto omezení:

<xs:restriction base="bt:simpleNType">

<xs:minInclusive value="100"/>

<xs:maxInclusive value="999"/>

</xs:restriction>

Chtěl bych si přepsat hlášku, že to neodpovídá vzoru tím, že řeknu, že min hodnota je 100, max 999,

ale neumím se dostat na tyto hodnoty.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Určitě se to dá.

tady je "návod":

http://stackoverflow.com/questions/11569...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za odkaz. Našel jsem ještě toto řešení, třeba to někomu taky pomůže.

http://geekswithblogs.net/.NETonMyMind/a...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback