Wie kann ich nach dem NEWLINE in XML -Elementwert einstellen, wenn Sie einen XMLTextWriter verwenden?

StackOverflow https://stackoverflow.com/questions/874147

  •  22-08-2019
  •  | 
  •  

Frage

Ich versuche nach einer neuen Zeile einzusetzen, wenn ich einen xmltextwriter verwende

Also will ich das im Wesentlichen

<?xml version="1.0" encoding="utf-16"?>
<element>
  a
</element>

Aber mit dem folgenden Code bekomme ich das

<?xml version="1.0" encoding="utf-16"?>
<element>
a
</element>

Hier ist mein aktueller Testkabelbaum

[Test]
public void XmlIndentingTest()
{
    var provider = new StringBuilder();
    var settings = new XmlWriterSettings
                       {
                           Indent = true,
                           IndentChars = "  ",
                       };
    using (var writer = new StringWriter(provider))
    {
        using (var xmlWriter = XmlTextWriter.Create(writer, settings))
        {
            xmlWriter.WriteStartElement("element");
            xmlWriter.WriteString("\r\na\r\n");
            xmlWriter.WriteEndElement();
        }
    }
    Debug.WriteLine(provider.ToString());
}
War es hilfreich?

Lösung

Die im Schriftsteller festgelegte Einklebung dient zur Eindrücke zwischen Elementen, bei denen es keine signifikante Weißespace gibt. Die Whitespace, die Sie erstellen möchten, ist Siginficant, da er Teil des Textwerts zwischen den Öffnungs- und Schließetags ist.

Wenn der Autor dies dem normalen XML tun würde, würde es den Textinhalt in inakzeptabler Weise ändern. Sie müssen dies selbst tun.

Andere Tipps

Ihr Code doesexakt, was Sie ihm sagen, fürchte ich.

xmlWriter.WriteStartElement("element"); //<element>
xmlWriter.WriteString("\r\na\r\n");     //newline, directly followed by 'a'
xmlWriter.WriteEndElement();            //</element>

Wenn Sie eine Eindringung wünschen, müssen Sie dies in Ihren Code schreiben, wie

xmlWriter.WriteString("\r\n\ta\r\n");    

Das Problem mit diesem Ansatz ist, dass wenn Ihre <element> ist bereits eingerückt, es wird die Eindrücke durcheinander bringen - Ihr 'a' würde immer noch genau ein Tab eingerückt.

So können Sie entweder die Eindrücke selbst irgendwie selbst berechnen und die entsprechende Anzahl von Registerkarten schreiben, oder Sie gehen mit dem gesamten Element in einer Zeile ein

<element>a</element>

Dies ist definitiv klarer, aber es mag seltsam aussehen, wenn 'a' ein sehr langer Text wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top