Mam plik XML z określoną lokalizacją schematu, taką jak ta:
xsi:schemaLocation="someurl ..\localSchemaPath.xsd"
Chcę sprawdzić poprawność w C #. Visual Studio, kiedy otwieram plik, sprawdza go w odniesieniu do schematu i doskonale wyświetla listę błędów. Jednak w jakiś sposób nie mogę zweryfikować go automatycznie w C # bez określenia schematu do walidacji w następujący sposób:
XmlDocument asset = new XmlDocument();
XmlTextReader schemaReader = new XmlTextReader("relativeSchemaPath");
XmlSchema schema = XmlSchema.Read(schemaReader, SchemaValidationHandler);
asset.Schemas.Add(schema);
asset.Load(filename);
asset.Validate(DocumentValidationHandler);
Czy nie powinienem być w stanie automatycznie zweryfikować za pomocą schematu określonego w pliku XML? Czego mi brakuje ?
Odpowiedzi:
Musisz utworzyć wystąpienie XmlReaderSettings i przekazać je do XmlReader podczas jego tworzenia. Następnie możesz zapisać się
ValidationEventHandler
w ustawieniach, aby otrzymywać błędy walidacji. Twój kod będzie wyglądał tak:źródło
using
klauzuli dla kompletności :)settings.ValidationEventHandler += (o, args) => { errors = true; // More code };
Prostszym sposobem, jeśli używasz .NET 3.5, jest użycie
XDocument
iXmlSchemaSet
walidacja.Więcej pomocy można znaleźć w dokumentacji MSDN .
źródło
<catalog><![CDATA[my <i> new </i> catalog....]]></catalog>
jest właściwym sposobem, aby to zrobić.Poniższy przykład sprawdza poprawność pliku XML i generuje odpowiedni błąd lub ostrzeżenie.
W poprzednim przykładzie zastosowano następujące pliki wejściowe.
books.xsd
źródło
osobiście wolę walidację bez oddzwonienia:
(zobacz post Timiz0r w Synchronous XML Schema Validation? .NET 3.5 )
źródło
Miałem taki rodzaj automatycznej walidacji w VB i tak to zrobiłem (przekonwertowałem na C #):
Następnie zapisałem się na
settings.ValidationEventHandler
wydarzenie podczas czytania pliku.źródło