linq-to-xsd

___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123xmlserialization ___ Dieses Tag bezieht sich auf Serialisierungstechnologien, die XML als Datenformat verwenden. ___ tag123xsd ___ XSD bezieht sich im Allgemeinen auf ein Dokument, das im W3C-XML-Schemaformat geschrieben wurde und eine Beschreibung eines bestimmten XML-Dokumenttyps enthält. ___ tag123net35 ___ Die Version 3.5 von .NET Framework, die auf dem 2.0 .NET Framework mit zusätzlichen Assemblys (einschließlich 3.0) basiert. Verwenden Sie für Fragen, die sich speziell auf .NET Framework 3.0 beziehen. Bei Fragen zu .NET Framework verwenden Sie im Allgemeinen das .net-Tag. ___ tag123lingtoxsd ___ Die LINQ to XSD-Technologie bietet .NET-Entwicklern Unterstützung für typisierte XML-Programmierung. ___ qstntxt ___

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?

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

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 %code% 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 %code% zwischenspeichern würdest, würdest du es kaum bemerken.

    
___
1
Antwort

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

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 verwen...
10.05.2012, 23:39