![]() |
xml Attribute unter .Net
Hi Delphianer,
habe ein kleines Prob. eines Anfängers. Möchte eine xml Datei erstellen und Attribute (Value Felder muessen als Variable erstellt werden) erstellen: Xml-Datei: languageGrp -> language (Attribute:TYPE, Value:Source Attribute:LANG, Value:EN-US) Wie mache ich das unter Delphi 2005 (.Net)? Die xml-Datei node usw. Bekomme ich hin, aber wie weise ich Attribute hinzu ? Vielen Dank an die Experten ! Mike |
Re: xml Attribute unter .Net
hi,
ich hab sowas schon mal gemacht hab aber gerade nicht die möglichkeit und zeit nachzukukn. aber wenn ichs bei msdn gerade richitg nachgekukt habe, XMLNode.Attributes.Append sollte deine funktion sein. XMLNode ist der Knoten der Attribute hinzugefügt bekommen soll und XMLNode.Attributes ist eine XMLAttributeCollection zu der du dann beliebigviele Attribute zum Node adden kannst. ich hab anfangs die XML-Dateien auch mit Hand erstellt, vieleicht solltest du auch mal bei MSDN unter XMLSerializer und XMLDeserializer nachschauen. Der konvertiert dir ganze Objektlisten zu XML Datei und läd sie wieder ein. Greetz |
Re: xml Attribute unter .Net
Hi Graetz,
danke fuer Deine Antwort. ABER es funzt immer nicht. Vielleicht hast Du noch einen Vorschlag. Mike |
Re: xml Attribute unter .Net
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:
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:
[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");
Code:
Jetzt kommt die Serialisation. Dazu genügen die folgenden Zeilen:
[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); }
Code:
Und voilà:
XmlSerializer serialize = new XmlSerializer(typeof(LanguageGroup));
TextWriter writer = new StreamWriter("languages.xml"); serialize.Serialize(writer, languageGroup); writer.Close();
XML-Code:
Und natürlich kannst du die Infos der XML-Datei wieder einlesen und nutzen:
<?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>
Code:
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. :oops:
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); } |
Re: xml Attribute unter .Net
Um dein Problem
![]() |
Re: xml Attribute unter .Net
Hi,
vielen Dabk und sorry. Mike |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz