Frage

Ich habe eine XML-Zeichenfolge in der Tabelle db gespeichert mit Zeilenvorschub-Zeichen. In meinem C # 3.5-Programm, ich laden und manipulieren, es Linq to XML verwenden und es dann als String zeigen in der Textbox-Steuerelement auf der Benutzeroberfläche Form.

Ich brauche diese xml einrücken sowie Zeilenvorschübe / Wagenrücklauf zu bewahren, während es in der Benutzeroberfläche zeigt.

Lage ist, es zu einrücken, aber wie kann ich LF / CR Zeichen in dem XML-??

erhalten

Hier ist die Probe C # -Code:

    XElement rootNode = CreateRootNode();
    XElement testXmlNode = XElement.Parse(xmlFromDbWithLFChars);

    rootNode.Add(testXmlNode );

    var builder = new StringBuilder();
    var settings = new XmlWriterSettings()
    {
     Indent = true
    };

    using (var writer = XmlWriter.Create(builder, settings))
    {
     rootNode.WriteTo(writer);
    }
    xmlString  = builder.ToString();   

    xmlString = xmlString.Replace("
", Environment.NewLine); //Doesnt work

    xmlString = xmlString.Replace("
", Environment.NewLine);  //Doesnt work

//Heres how the xml should look like in the UI control:
 <TestNode
             name="xyz"
             Id="12">
             <Children>
                  <Child name="abc" location="p" />
             </Children>
    </TestNode>
War es hilfreich?

Lösung

Was möchten Sie tun, ist, die Einstellungen der Formatierung auf der XmlWriter zu setzen, so dass Ihre Zeile ändern:

var settings = new XmlWriterSettings() 
    { 
     Indent = true 
    }; 

Um so etwas wie folgt aus:

var settings = new XmlWriterSettings() 
    { 
     Indent = true,
     IndentChars = "\n",
     NewLineOnAttributes = true
    }; 

Andere Tipps

Danke allen für Ihre Antworten. Schließlich konnte ich diese Arbeit bekommen.

Mein Ansatz nicht Linq2Xml / SAX parser.Am Erzeugung des xml mit Stringbuilder verwenden und es in der Benutzeroberfläche in einem WinForms Rich Textbox control.Now zeigt, kann ich Line-Feeds sehen, wie es in der Benutzeroberfläche ist.

Jedes Mal, wenn Sie ein XML-Dokument in eine Zeichenfolge konvertieren und starten Sie die Zeichenfolge zu manipulieren, sollten Sie an sich selbst denken: „Selbst, ich etwas falsch mache.“ Ich bin nicht sicher, aus Ihrer Beschreibung, ob das stimmt, aber ich wette, es ist.

Wenn die Leerzeichen in der XML aus der Datenbank sind Ziehen von Bedeutung ist, möchten Sie es erhalten, wenn Sie es in Ihrem XElement analysieren. Um dies zu tun, verwenden Sie die Überlastung von XElement.Parse, das dies tut, z.

XElement testXmlNode = XElement.Parse(xmlFromDbWithLFChars, LoadOptions.PreserveWhitespace);

Wenn Sie dies tun, wird der Parser verlassen Leerzeichen in die geparste Textknoten des XElement Dokument genau, wo sie in der ursprünglichen Zeichenfolge waren. XmlWriter verwirrt nicht mit vorhandenen Leerzeichen in Textknoten (obwohl es neue Leerzeichen hinzufügen, wenn Sie es einrücken sagen), so sollte dies Sie bekommen, was Sie wollen.

Sie können XmlReader verwenden die neuen Linien und alles zu erhalten .. hier ist Beispielcode, der gut für mich gearbeitet, wenn die Prüfung:

System.Xml.XmlReader reader = System.Xml.XmlReader.Create("XML URI here");
System.Text.StringBuilder sb = new System.Text.StringBuilder();
while (reader.Read())
{
    sb.Append(reader.ReadOuterXml());
}
reader.Close();
txtXML.InnerText = sb.ToString();
txtXML.Visible = true;

In meinem Test geladen ich XML-Datei, können Sie Ihre manipulierten XML-Zeichenfolge laden.

Haben Sie versucht, sicherstellen, dass die Textbox in mehrzeiligen Modus ist und akzeptiert Wagenrücklauf ?

public void CreateMyMultilineTextBox() {
   // Create an instance of a TextBox control.
   TextBox textBox1 = new TextBox();

   // Set the Multiline property to true.
   textBox1.Multiline = true;
   // Add vertical scroll bars to the TextBox control.
   textBox1.ScrollBars = ScrollBars.Vertical;
   // Allow the RETURN key to be entered in the TextBox control.
   textBox1.AcceptsReturn = true;
   // Allow the TAB key to be entered in the TextBox control.
   textBox1.AcceptsTab = true;
   // Set WordWrap to true to allow text to wrap to the next line.
   textBox1.WordWrap = true;
   // Set the default text of the control.
   textBox1.Text = "Welcome!";
 }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top