Entwickler-Ecke
IO, XML und Registry - c# XML Dateien in richTextBox einlesen und in einem Zug ....
implicit - Do 11.06.09 16:26
Titel: c# XML Dateien in richTextBox einlesen und in einem Zug ....
Hi Leute,
Ich braeuchte nen kleinen Denkanstoss ;)
Ich lese eine XML Datei mittels LinQ ein und gebe diese an ein richTextBox. Das einlesen funktioniert soweit erstmal total einfach und auch vorher das combobox fuellen.. Jetzt kommt aber mein Problemchen.
Wharscheinlich eher ein Verstaendnis Issue ;)
In der XML Datei sind bestimmt Begriffe als Variablen an gegeben. zum Beispiel $Name, $Anschrift usw.
Wie kann ich diese Variablen an bestimmte Textfelder Uebergeben oder bei dem Lesevorgang ersetzen durch einen string aus einem Textbox ?
Dieses Programm soll sozusagen ein Template Builder sein der Bestimmte Emails aus der XML datei nimmt und diese mit Daten fuellt und in einer richTextBox darstellt.
Wenn Ihr code braucht einfach fragen. Fuer Antworten bin ich schon jetzt dankbar.
Kha - Do 11.06.09 17:16
:welcome:
implicit hat folgendes geschrieben : |
Wie kann ich diese Variablen an bestimmte Textfelder Uebergeben oder bei dem Lesevorgang ersetzen durch einen string aus einem Textbox ? |
Da du das Problem nur allgemein beschrieben und nicht erwähnt hast, wo es nun hängt, kann ich dir auch nur eine allgemeine Antwort geben: Mit
string.Replace ;) .
implicit - Do 11.06.09 19:27
Hehe,
Ok das habe ich verdient ;)
Also doch mal bissel code mal hier :)
Also ich lese aus der XML Daten aus. Die XML sieht folgendermassen aus (is natuerlich nur nen Auschnitt)..
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| <?xml version="1.0" encoding="utf-8"?> <mailing> <template> <title>Details Anfrage</title> <mail>$Anrede $Name,
Zu der von Ihnen eröffneten Bearbeitungsnummer $CaseID ...
$Abschied </mail> </template> </mailing> |
Diese wird mit folgendem Code ausgelesen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| private void getemailCombo_SelectedIndexChanged(object sender, EventArgs e) { { XDocument xmlDoc = XDocument.Load("G:\\TandS/templates/email/mails.xml");
var Template = from template in xmlDoc.Descendants("template") where template.Element("title").Value == getemailCombo.SelectedItem.ToString() select new { Title = template.Element("title").Value, Mail = template.Element("mail").Value, };
richTextBox1.Text = ""; foreach (var template in Template) { richTextBox1.Text = richTextBox1.Text + "Title: " + template.Title + "\n"; richTextBox1.Text = richTextBox1.Text + "Mail: " + template.Mail + "\n\n"; }
if (richTextBox1.Text == "") richTextBox1.Text = "No Results."; } } |
So meine Frage ist nun. Wie kann ich die Strings mit Varibalen Zeichen $ replacen. Wird das direkt bei dem Auslesen void gebastelt oder benoetige ich ne einzellne void dazu ?
Gruss Steffen
P.s. Danke fuer das Welcome :)
implicit - Do 11.06.09 19:59
Jep, DANKE fuer den Denkanstoss...
bissel Nachdenken und ne andere Meinung hilft :)
C#-Quelltext
1: 2: 3:
| string s = richTextBox1.Text; string v = s.Replace("$Name", "Steffen"); richTextBox1.Text = v; |
Bumm und schon fetzt es :) DANKOE nochmal.... !!!
Jetzt brauch ich nur noch nen Multi string replace :)
Kannst Du mir da nen Tip zu geben ?
JüTho - Do 11.06.09 20:30
implicit hat folgendes geschrieben : |
Jetzt brauch ich nur noch nen Multi string replace :) |
Den kenne ich nicht bei den Standard-Klassen, aber das ist mit
for oder
foreach doch überhaupt kein Problem. Das Problem liegt eher darin, dass zwar die Suchbegriffe fest sind und in einem Array oder einer
List<string> vorgegeben werden können, aber die "Ersatzbegriffe" von unterschiedlichen Stellen geholt werden müssen.
implicit hat folgendes geschrieben : |
C#-Quelltext 1: 2: 3:
| string s = richTextBox1.Text; string v = s.Replace("$Name", "Steffen"); richTextBox1.Text = v; | |
Dreh besser die Reihenfolge um: zuerst alle Vorgänge mit Suchen + Ersetzen erledigen, erst am Schluss in dir RTF-Box eintragen.
Gruß Jürgen
implicit - Do 11.06.09 21:08
Danke fuer den Hinweis, aber es funktioniert perfekt nun
Loesung:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| string p = richTextBox1.Text; p = p.Replace("$Name", (textBox2.Text)); p = p.Replace("$Agent",(label9.Text)); p = p.Replace("$CloseDate", Convert.ToString(dateTimePicker1.Value)); p = p.Replace("$CaseID", (textBox3.Text)); p = p.Replace("$Anrede", Convert.ToString(anredeCombo.SelectedItem)); richTextBox1.Text = p; |
Somit ist das Thema hier erledigt. Auftrag erfuellt :)
Bis zum naechsten mal
JüTho - Fr 12.06.09 08:22
Hallo,
noch ein paar Kleinigkeiten: Fast die Hälfte deiner
Klammern ist überflüssig; die erschweren nur das Lesen:
C#-Quelltext
1:
| p = p.Replace("$CaseID", textBox3.Text); |
Um die String-Darstellung eines Wertes zu bekommen, gibt es immer die
ToString-Methode; die Convert-Methoden sind äußerst selten sinnvoll:
C#-Quelltext
1:
| p = p.Replace("$Anrede", anredeCombo.SelectedItem.ToString()); |
Bezeichner wie textBox3 und label9 gehören verboten. Da weißt auch du spätestens nach 2 Wochen nicht mehr, wozu diese Controls da sind. anredeCombo ist um Längen besser. Siehe dazu auch
NET Richtlinien für Namen [
http://msdn.microsoft.com/de-de/library/ms229002(VS.80).aspx].
So wie du jetzt mehrfach hintereinander Replace aufrufst, vermeidest du auch das ständige Ändern des Inhalts der RTB-Box; das würde die Anzeige ziemlich umständlich und langsam machen. Das ist also nebenbei eine Verbesserung der Geschwindigkeit.
Gruß Jürgen
implicit - Sa 13.06.09 13:33
hi,
danke fuer Deinen Construktiven Kommentar :) habe auch gleich mal die Standart labels Bezeichner geaendert. :)
Das war eh erstmal nur fuern test der void.
das mit den Klammern und der methode hatte ich net gewusst ;) komme noch aus ner alten Pascal - Schule :)
Jetzt habe ich allerdings nen anderes Issue :) also kein parsen aus ner xml .. sondern nen TreeView fuellen aus ner XML.
Gruss Steffen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!