.NET-XML-Deserialisierung ignoriert Namespaces

8

Ich habe tausende von XML-Dateien, die demselben Schema / derselben Struktur folgen. Ich habe IXmlSerializable implementiert und lese daher die Elemente und Attribute selbst.

Mein Problem ist, dass diese Dateien jeweils einen anderen falschen Namespace verwenden. Diese Dateien kommen von einer anderen Quelle, also kann ich das nicht ändern: D Außerdem gibt es zu viele dieser Namespaces für mich, um einfach ein Array der möglichen Namespaces zu erstellen und es an den xmlserializer weiterzuleiten.

Wenn ich jetzt keinen Namespace spezifiziere, wird ein [xmlns: ns0="http://tempuri.org/abcd.xsd" wurde nicht erwartet] Fehler.

Ich möchte dem Serializer sagen können, dass er den Namespace einfach ignoriert, wenn er mein Objekt deserialisiert und ReadXML einfach auslöst. Oder einfach nur sagen können, dass es den Namensraum "http://tempuri.org/" akzeptiert.

Ist das möglich?

Ich möchte vermeiden, die Dateien so viel wie möglich zu ändern.

Danke!

    
user1698428 25.09.2012, 20:24
quelle

3 Antworten

0

Es ist keine Antwort auf Ihre Frage, wie Sie dem XmlSerialiser mitteilen, Namespaces zu ignorieren, sondern eine Umgehungslösung. Sie können eine xslt-Transformation verwenden, um die Namespaces vor dem Serialisieren aus der XML-Datei zu entfernen.

%Vor%

Eine Reihe von Erweiterungsmethoden als Helfer dafür, die ein bisschen schwierig werden werden, um sie alle vielleicht zu bekommen, aber ich werde versuchen:

%Vor%     
Johan Larsson 11.10.2012 16:15
quelle
0

Ja, das ist möglich. Wenn Sie die Deserialize -Methode von XmlSerializer aufrufen, können Sie eine XmlTextReader -Instanz angeben.

Diese Antwort von Cheeso auf eine verwandte C # -Frage zeigt, wie man eine XmlTextReader erstellt, die alle in Namespaces auftretenden Namespaces ignoriert die XML-Datei. Ich habe mir die Freiheit genommen, seine Idee in VB zu übersetzen und ein einfaches Proof-of-Concept-Beispiel basierend auf Ihren Anforderungen zu erstellen:

%Vor%

Hinweis: Wenn nur der Standard-Namespace des -Dokuments unterschiedlich ist (dh die einzelnen Tags haben keine unterschiedlichen Namespaces), wird ein TextXmlReader -Standard verwendet, für das die Eigenschaft Namespaces festgelegt ist False genügt.

%Vor%     
Heinzi 13.10.2016 21:09
quelle
0

Sie können Namespaces aus der XML-Datei entfernen, indem Sie diesen Code verwenden

%Vor%     
j.kahil 04.02.2015 20:03
quelle