Wie erhalte ich LinqToXSD, um Namespace-Präfix-Deklarationen korrekt auszugeben?

8

Ich experimentiere mit LinqToXSD mit XML-Datenbindungsklassen und einem XML-Schema, das eine Reihe von importierten Schemas enthält. Alle Schemas befinden sich hier .

Um dies zu erreichen, habe ich das folgende Stammschema-Dokument verwendet:

%Vor%

Ich habe Klassen mit Linq zu XSD erstellt. Ich schrieb dann den folgenden Test:

%Vor%

Ich habe eine Ausgabe erwartet, die ungefähr so ​​aussieht:

%Vor%

Stattdessen habe ich Folgendes bekommen:

%Vor%

Gibt es eine Möglichkeit, LinqToXSD die erwartete Ausgabe zu erzeugen?

    
Robert Harvey 10.05.2012, 23:39
quelle

1 Antwort

1

Sie sollten jedes importierte Schema zuordnen:

%Vor%

elementFormDefault gilt nur für das Schema, in dem es sich befindet, und es überschreibt die Einstellungen in keinem Include oder Import.

Wenn Sie Namespaces ausblenden möchten, müssen alle Schemas elementFormDefault=" unqualifiziert " angeben. Wenn Sie Namespaces verfügbar machen möchten, muss jedes Schema elementFormDefault = angeben " qualifiziert "

AKTUALISIERT nach dem Überprüfen der Komponententests:

Ihre Eingabe:

%Vor%

Ihre Ausgabe:

%Vor%

Das herausragende Problem ist die Duplizierung des Tags - alles sieht für mich ok aus und versucht immer noch zu verstehen, warum das passiert.

UPDATE Montag:

Ich denke, es gibt einen Fehler im LinqToXSD-Tool - ich habe jede mögliche Kombination durchgespielt und kann Ihr Problem nicht konsequent umgehen. Ich habe es jedoch geschafft, das <Tmats> Duplikationsproblem zu beheben :

Ändern Sie in Ihrer XmlHelper-Datei die return-Anweisung:

%Vor%

Ich weiß, es ist ein Hack , aber es behebt das Problem und Ihr LoopbackTest besteht.

Sie erhalten keine Präfixe, wenn Sie Elemente mit der Tmats-Klasse erstellen. Ich habe verschiedene Kombinationen von Attributen ausprobiert, und das Beste, was ich tun konnte, war, Namespaces erneut anzuhängen. Wenn Sie Informationen mit einem externen System austauschen, habe ich eine Korrektur :

  1. Benutze dein Tmats-Objekt in deinem Code,
  2. Serialisieren Sie es mit Namespaces,
  3. Führen Sie es durch ein XSLT durch, um ns Präfixen zuzuordnen.

Ich weiß, dass es klobig ist, aber ich denke, es ist das Beste, was Sie tun werden, um den LinqToXSD-Code zu reparieren.

XSLT, um Namespaces Präfixen zuzuordnen (Sie müssen die Namespaces in der Deklaration 'Stylesheet' und auch im 'Mapper' pflegen:

%Vor%

Produziert:

%Vor%

Ok, das ist alles andere als ideal, aber Ihr Code funktioniert intern nur dann gut, wenn Sie mit anderen Leuten interagieren müssen, um die XML-Ausgabe zu korrigieren (denken Sie daran, elementFormDefault = zu ändern) "qualifiziert" (oder entferne es in deiner XSD) - wenn du die XSLT als XslCompiledTransform zwischenspeichern würdest, würdest du es kaum bemerken.

    
web_bod 15.05.2012 01:24
quelle