Die Erhaltung Sonderzeichen in XML
-
08-10-2019 - |
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-??
erhaltenHier 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>
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!";
}