Was Master_BB mit Serialisation meint, ist eine ganz feine Sache. Du brauchst den
XML-Code der Datei nicht mehr von Hand erzeugen, sondern du lässt das .NET Framework ackern. Mangels Delphi.NET mal ein Beispiel für deinen Fall in CSharp. Du erstellst eine Language-Klasse mit den von dir gewünschten Inhalten:
Code:
[XmlType("language")]
public class Language
{
private string languageType;
private string languageValue;
public Language() : this(string.Empty, string.Empty)
{
}
public Language(string languageType, string languageValue)
{
this.languageType = languageType;
this.languageValue = languageValue;
}
[XmlAttribute("TYPE")]
public string Type
{
get { return this.languageType; }
set { this.languageType = value; }
}
[XmlAttribute("LANG")]
public string Value
{
get { return this.languageValue; }
set { this.languageValue = value; }
}
}
// Language language = new Language("Source", "en-US");
Die Deklarationen in den eckigen Klammern sorgen beim Generieren der
XML-Datei für das gewünschte Layout. Jetzt benötigst du aber wohl noch eine Basiskollektion für deine Language-Klasse, weil du vermutlich verschiedene Sprachen speichern möchtest. Ich habe mich dafür mal an einem alten Beispiel von Robert_G bedient und es auf den absolut notwendigen bzw. sinnvollen Grundcode verkürzt:
Code:
[XmlRoot("languageGrp")]
public class LanguageGroup : CollectionBase
{
public Language this[int index]
{
get { return ((Language)(List[index])); }
set { List[index] = value; }
}
public int Add(Language language)
{
return this.List.Add(language);
}
public int Add(string languageType, string languageValue)
{
return this.List.Add(new Language(languageType, languageValue));
}
// zusätzliche Konstruktoren
// AddRange-Methoden
// IndexOf, Contains, Insert usw.
// ;-)
}
Language language = new Language("Source", "en-US");
LanguageGroup langGroup = new LanguageGroup();
langGroup.Add(language);
langGroup.Add("Source", "de-DE");
// Sprache anhand des Index auswählen
Language selectedLang = langGroup[1];
Console.WriteLine("type {0}, value {1}", selectedLang.Type, selectedLang.Value);
// alles anzeigen
foreach (Language loop in langGroup)
{
Console.WriteLine("type {0}, value {1}", loop.Type, loop.Value);
}
Jetzt kommt die Serialisation. Dazu genügen die folgenden Zeilen:
Code:
XmlSerializer serialize = new XmlSerializer(typeof(LanguageGroup));
TextWriter writer = new StreamWriter("languages.xml");
serialize.Serialize(writer, languageGroup);
writer.Close();
Und voilà:
XML-Code:
<?
xml version="1.0" encoding="utf-8"?>
<languageGrp
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<language TYPE="Source" LANG="en-US" />
<language TYPE="Source" LANG="de-DE" />
</languageGrp>
Und natürlich kannst du die Infos der
XML-Datei wieder einlesen und nutzen:
Code:
XmlSerializer serialize = new XmlSerializer(typeof(LanguageGroup));
FileStream reader = new FileStream("languages.xml", FileMode.Open);
LanguageGroup langGroup = (LanguageGroup)serialize.Deserialize(reader);
reader.Close();
foreach (Language language in langGroup)
{
Console.WriteLine("type {0}, value {1}", language.Type, language.Value);
}
Wie gesagt, sorry, ich habe kein Delphi.NET. Da es sich aber um Befehle aus dem .NET Framework handelt, sollte sich das Beispiel recht schnell "übersetzen" lassen.