Wie verwende ich XmlWriterSettings () bei der Verwendung von override void WriteEndElement ()?

8

Ich arbeite mit einer Legacy-Anwendung, die keine abgekürzten leeren XML-Elemente importiert. Zum Beispiel:

BAD leer:

%Vor%

GUT leer:

%Vor%

Ich kenne die Lösung, um dies zu erreichen, die ich jetzt vorstellen werde:

%Vor%

und der Client-Code:

%Vor%

Wenn Sie jedoch sorgfältig beobachtet haben, werden die XmlWriterSettings niemals im Client-Code verwendet. Daher ist die XML-Ausgabe schrecklich formatiert. Meine Fragen sind: Wie kann ich den obigen Code anpassen, um XmlWriterSettings zu akzeptieren?

Die Verwendung von Factory-Erstellungsmethoden und versiegelten / internen / abstrakten Klassen erschwert die Implementierung einer Außerkraftsetzung.

Ich werde eine alternative Lösung akzeptieren, ich bin nicht mit meiner obigen Lösung verheiratet.

  • Abhilfe LÖSUNG

Schritt 1: Erstellen Sie die folgende Klasse in Ihrer Lösung:

%Vor%

Schritt 2: Fügen Sie den folgenden Clientcode hinzu. Stellen Sie sicher, dass YOUR_OBJECT_TYPE und YOUR_OBJECT_INSTANCE durch die Klasse und die Instanz ersetzt werden, mit denen Sie arbeiten:

%Vor%

Die obige Problemumgehung erzeugt die folgende leere XML-Elementformatierung:

%Vor%

Das Problem bei dieser Problemumgehung besteht darin, dass ein Zeilenvorschub hinzugefügt wird (beachten Sie, dass die Elemente sich in separaten Zeilen befinden). Dies mag für Sie akzeptabel sein, verursacht jedoch Probleme mit meiner alten Anwendung.

    
sapbucket 15.11.2012, 00:49
quelle

5 Antworten

4

Wie wäre es damit.

Besorgen Sie sich die tolle XmlWrappingWriter Klasse von Ссылка (Ich habe den Code aus Gründen weggelassen Kürze).

Damit können wir eine Unterklasse wie folgt erstellen (sehr ähnlich der ursprünglichen):

%Vor%

Es kann dann wie folgt aufgerufen werden (wieder sehr ähnlich):

%Vor%

In meinem Fall ein Element, das zuvor als

gerendert wurde %Vor%

wurde

%Vor%

Wie Sie in Ihrer Frage angedeutet haben, ist dies ein ziemlich kniffliges Problem, da alles versiegelt / intern usw. ist, was Überschreibungen ziemlich schwierig macht. Ich denke, mein größtes Problem war, ein XmlWriter zu bekommen, um XmlWriterSettings zu akzeptieren: jenseits dieses Ansatzes konnte ich keine Möglichkeit finden, die ursprüngliche XmlTextWriterFull die angegebene XmlWriterSettings zu erhalten.

MSDN gibt an, dass diese Methode:

%Vor%

Kann verwendet werden, um XmlWriterSettings auf XmlWriter anzuwenden. Ich konnte das nicht so ausführen, wie ich es wollte (der Einzug funktionierte nie zum Beispiel), und nach dem Dekompilieren des Codes scheint es nicht so, dass alle Einstellungen mit dieser bestimmten Methode verwendet werden, weshalb mein Aufrufcode gerade reingeht Die outputFile (ein Stream von einer Art würde genauso gut funktionieren).

    
nick_w 20.11.2012 10:18
quelle
2

Die Problemumgehungslösung, die Sie in Ihrer Frage angegeben haben, fügt zusätzliche Zeilenumbrüche hinzu (wenn Einrückung aktiviert ist), da wir dem Verfasser mitteilen, dieses Element so zu behandeln, als hätte es untergeordnete Elemente.

So habe ich Ihre Problemumgehung geändert, um die Einrückung dynamisch zu manipulieren, um diese zusätzlichen Zeilenumbrüche zu vermeiden.

%Vor%     
pbar 05.12.2014 02:58
quelle
0

Eine andere Option.

%Vor%     
Peter 15.02.2013 12:58
quelle
0

Lassen Sie das hier für den Fall, dass jemand es braucht; denn keine der obigen Antworten löste es für mich oder schien übertrieben zu sein.

%Vor%

Der Trick bestand darin, die XmlWriterSettings.Indent = true festzulegen und sie dem XmlWriter .

Bearbeiten:

Alternativ können Sie auch

verwenden %Vor%

anstelle eines XmlWriterSettings.

    
PhoenixDev 09.09.2015 08:00
quelle
0

Das folgende Code-Snippet erzwingt das Drucken des schließenden Tags in derselben Zeile (Entschuldigung für die vb-Version, es sollte einfach sein, dasselbe mit C # neu zu schreiben):

%Vor%     
Pavel Sakau 19.04.2016 17:19
quelle

Tags und Links