Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: xml Attribute unter .Net

  Alt 25. Feb 2006, 11:09
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.
  Mit Zitat antworten Zitat