Entwickler-Ecke

WinForms - Wörter in xml. Datei mit Windows Forms ersetzen


Gooner - Di 29.06.10 16:02
Titel: Wörter in xml. Datei mit Windows Forms ersetzen
Hallo zusammen,

Und zwar habe ich eine xml. Datei, in der die Wörter Spielera01-Spielera18 und
Spielerb01-Spielerb18 jeweils ein paar hundert mal so drin stehen.

Ich würde nun gerne in der GUI mit Hilfe von Textfeldern diese Wörter durch die
wirklichen Namen ersetzen.

Am liebsten wäre es mir, die Namen mit Hilfe einer Checkbox bei gesetztem Haken
zu überschreiben. Nach dem Überschreiben aller Namen würde ich das "neue" xml. File
z.B. mit einem Button so abspeichern.

Hätte vielleicht jemand einen Tipp, wie ich das am besten realisieren könnte und
ist das so überhaupt möglich?

Vielen Dank im Voraus!

Gooner


danielf - Di 29.06.10 16:58

Hallo,

um Xml Dokumente in .NET verarbeiten zu können gibt es die Klasse XDocument. Für genauere Hinweise bräuchte man die genau Strukutr der Xml.

Generell kannst du natürlich zum Beispiel Links ein ListBox machen in der alle Spieler aufgelistet werden und bei auswählen Rechts eine Textbox anzeigen wo du die Werte ändern kannst.

Das wäre ein recht primitive Oberfläche. Dementsprechend könnte man das Xml wahrscheinlich gleich auch im Editor editieren :D Deshalb ist die letztendliche Umsetzung wohl stark von den Ansprüchen und Verwendungszweck abhängig - von denen wir sofar nichts wissen.

Gruß


gfoidl - Di 29.06.10 17:03

Hallo,

siehe auch Wörter in xml. Datei mit Windows Forms ersetzen [http://www.mycsharp.de/wbb2/thread.php?threadid=86072].

Bitte keine Crossposts.


mfG Gü


Christian S. - Di 29.06.10 17:05

user profile icongfoidl hat folgendes geschrieben Zum zitierten Posting springen:
siehe auch Wörter in xml. Datei mit Windows Forms ersetzen [http://www.mycsharp.de/wbb2/thread.php?threadid=86072].

Bitte keine Crossposts.
Crossposts sind bei uns erlaubt, auf den jeweils anderen Thread zu verweisen wird jedoch erwartet ;-)


Gooner - Di 29.06.10 18:27

user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,

um Xml Dokumente in .NET verarbeiten zu können gibt es die Klasse XDocument. Für genauere Hinweise bräuchte man die genau Strukutr der Xml.

Generell kannst du natürlich zum Beispiel Links ein ListBox machen in der alle Spieler aufgelistet werden und bei auswählen Rechts eine Textbox anzeigen wo du die Werte ändern kannst.

Das wäre ein recht primitive Oberfläche. Dementsprechend könnte man das Xml wahrscheinlich gleich auch im Editor editieren :D Deshalb ist die letztendliche Umsetzung wohl stark von den Ansprüchen und Verwendungszweck abhängig - von denen wir sofar nichts wissen.

Gruß


Hallo Daniel,

die Struktur sieht so aus:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<grammar xmlns="http://www.w3.org/2001/06/grammar"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/06/grammar
                             http://www.w3.org/TR/speech-grammar/grammar.xsd"

         xml:lang="de-DE" version="1.0">
  <rule id="thema" scope="public">
    <one-of>
 
<item>Spielera01</item>


  </one-of>
  </rule>
</grammar>


Wie müsste ich denn vorgehen, wenn ich jetzt - Spielera01 - z.B. durch Schmidt
ersetzen will?

Der Vorschlag von Dir wäre in der Tat eher "einfach", würde mir aber erstmal ausreichen..

Liebe Grüße und Danke!

Gooner

Moderiert von user profile iconChristian S.: XML-Tags hinzugefügt


danielf - Di 29.06.10 19:04

Zuerst muss man das Dokument einlesen (komplett in Speicher, sollte das Dokument viel zu groß sein muss man sich gedanken über SAX machen).

C#-Quelltext
1:
XDocument doc = XDocument.Load("filename.xml");                    


Mit der XPath-Extension-Methoden kannst du ein beliebiges Xml-Element auswählen:

C#-Quelltext
1:
2:
3:
XElement spielera01 = document.XPathSelectElement("//item[text()='Spielera01']");

spielera01.Value = "Mesut Özil";


das wars...

Gruß


Gooner - Mi 30.06.10 10:28

Hallo Daniel,

wenn ich das ganze jetzt so..


C#-Quelltext
1:
2:
3:
4:
5:
6:
private void button2_Click(object sender, EventArgs e)
        {
            XDocument doc = XDocument.Load("Default_18_Kader.xml");
            XElement spielera01 = doc.XPathSelectElement("//item[text()='Spielera01']");
            spielera01.Value = ("Mesut Özil");
        }


..probiere, bekomme ich eine NullReferenceException mit der Meldung, dass
der Objektverweis nicht auf eine Objektinstanz festgelegt wurde.

Hast Du eine Idee, wie ich das am besten gelöst bekomme?

Gruß
Gooner

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


danielf - Mi 30.06.10 10:35

Das liegt daran, dass der XPath-Ausdruck kein Element zurück gibt.

Deine Struktur ist wohl doch anders, am besten du fügst die XML hier mal rein (und nicht das Schema).

und bitte denke an die [cs ]-Tags für C#-Code und [ xml] für Xml.

Gruß


Gooner - Mi 30.06.10 10:57

Hallo Daniel,

Die xml. Datei besteht nur aus:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
<grammar xmlns="http://www.w3.org/2001/06/grammar"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.w3.org/2001/06/grammar
                             http://www.w3.org/TR/speech-grammar/grammar.xsd"

         xml:lang="de-DE" version="1.0">
  <rule id="thema" scope="public">
    <one-of>


<item>Kopf spielera01 spielerb01</item>
<item>Kopf spielerb01 spielera01</item>
<item>Boden spielera01 spielerb01</item>
<item>Boden spielerb01 spielera01</item>

  </one-of>
  </rule>
</grammar>


Und noch ungefähr 2500 anderen items aber die wollte ich jetzt hier nicht reinkopieren :-)

Könnte Dir die ganze xml.Datei auch per Mail zukommen lassen oder so, wie Du willst..

Vielen Dank!

Gruß
Gooner


danielf - Mi 30.06.10 11:03

Letztes mal sah deine Datei noch <item>Spielera01</item> so aus. Deshalb funktioniert der XPath-Ausdruck nicht.

Die Struktur der Xml ist total unsinnig. Wenn du nichts daran ändern kannst, würde ich vorschlagen du machst erst eine Transformation. Ansonsten gleich richtig machen.

Ansonsten schau dir XPath genauer an, bzw. überleg dir was du wirklich willst, bzw. an welchem Kriterium du nun das item auswählen willst.

So ist das Ganze aber total unlogisch, unschön bis unmöglich.


Gooner - Mi 30.06.10 11:22

Ich habe Dir mal eine pn geschickt, hoffe das ist ok..

Gruß
Gooner


Kha - Mi 30.06.10 18:05

Eigentlich nicht, siehe §2.3 in unseren Richtlinien [http://c-sharp-forum.de/sites.php?id=9&sub=,1] :) .