AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

xml Attribute unter .Net

Ein Thema von mikenrw · begonnen am 22. Feb 2006 · letzter Beitrag vom 26. Feb 2006
Antwort Antwort
mikenrw

Registriert seit: 9. Okt 2005
11 Beiträge
 
#1

xml Attribute unter .Net

  Alt 22. Feb 2006, 16:43
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
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#2

Re: xml Attribute unter .Net

  Alt 22. Feb 2006, 17:02
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
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
mikenrw

Registriert seit: 9. Okt 2005
11 Beiträge
 
#3

Re: xml Attribute unter .Net

  Alt 23. Feb 2006, 15:54
Hi Graetz,

danke fuer Deine Antwort. ABER es funzt immer nicht.
Vielleicht hast Du noch einen Vorschlag.

Mike
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: xml Attribute unter .Net

  Alt 25. Feb 2006, 10: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
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: xml Attribute unter .Net

  Alt 26. Feb 2006, 17:29
Um dein Problem erneut aufzugreifen: Ist dir nie die Methode "XmlDocument.CreateAttribute" aufgefallen? Das Prinzip ist das gleiche wie beim Erstellen von Knoten mit "CreateElement". Und die erzeugten Attribute hängst du mit "XmlNode.Attributes.Append" an.
  Mit Zitat antworten Zitat
mikenrw

Registriert seit: 9. Okt 2005
11 Beiträge
 
#6

Re: xml Attribute unter .Net

  Alt 26. Feb 2006, 17:46
Hi,

vielen Dabk und sorry.

Mike
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz