Ich arbeite mit mehreren XElement
-Objekten, um einige benutzerdefinierte Daten für mehrere Objekte in meiner Bibliothek bereitzustellen. Ich versuche, die Struktur der gesamten XML-Datei nicht zu spezifizieren, weil es der Bibliothek egal ist, wie die gesamte XML aussieht, solange die spezifischen Elemente, die sie benötigt, richtig strukturiert sind.XML-Schema Validierung von XElement
Zu diesem Zweck habe ich 3 separate XSD
Dateien, die Schema für jeden der 3 XElements
meine Klasse Bedürfnisse definieren, jedoch bin ich in einige Probleme läuft Validierung des XElement gegen das Schema. Es scheint keine Methode zu geben, dies ohne Umgehung zu tun.
Von der MSDN-Seite scheint die Erweiterungsmethode XElement.Validate()
darauf ausgerichtet zu sein, Unterelemente einer größeren Datei erneut zu validieren. Das XmlSchemaObject
Argument verursacht meine Probleme, da ich nicht davon ausgehen kann, dass es in jedem der XElements
vorhanden sein wird. Ich denke, dass ich dieses Problem umgehen kann, indem ich die XmlSchemaElement
von meinem XmlSchemaSet
als das XmlSchemaObject
Argument ergreife, aber da die bereits alles definiert, scheint es seltsam, dies zu tun.
Gibt es eine bessere Option für die Validierung eines XElement
mit einem Schema ohne zuerst die gesamte XDocument
zu validieren?
Oder sollte ich einfach die Business-Schicht mit der Schema-Validierung in der Anwendung und lassen Sie die Bibliothek die XElement
ist richtig gebildet (ich dachte über diese Option, sondern als eine persönliche Präferenz lieber vermeiden Ausnahmen werfen und würde lieber nur lassen die aufrufende Methode weiß, dass die XElement
über einen Rückgabeparameter ungültig ist).
Ich habe keine Ahnung, warum ich nicht daran gedacht habe, den Code in meine eigene 'XElement.Validate() 'Extension-Methode einzubinden. Scheint so logisch jetzt, dass du es sagst. Ein 'XDocument' zu erstellen ist eine andere gute Idee, die zu mir hätte auftreten sollen (Ich habe zu viel Zeit damit verbracht, herauszufinden, wie man es konvertiert, und ich habe die offensichtliche Lösung verpasst). Ich werde mit beiden experimentieren und sehen, was ich bevorzuge. – psubsee2003