C++/CLI und LINQ (XML) - Schreiben klappt, aber wie wieder auslesen??
-
Hallo zusammen!
Ich möchte gerne eine Konfigurationdatei für mein Programm nutzen, und habe mich für XML entschieden.
Im Internet gibt es ja viele Beispiele für C# und Linq, also habe ich mich daran gemacht und eins davon verwendet.XML Schreiben:
XDocument konfig = gcnew XDocument( gcnew XDeclaration("1.0", "ISO-8859-1", "yes"), gcnew XComment("Konfigurations-Datei"), gcnew XElement("Konfiguration", gcnew XElement("Login","Benutzername", gcnew XAttribute("typ","Nutzer") ) ) ); konfig.Save("C:\\test.xml);
XML-Datei:
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?> <!--Konfigurations-Datei--> <Konfiguration> <Login typ="Nutzer">Benutzername</Login> </Konfiguration>
Zumindest schreibend klappt es, aber für das Auslesen mit nem Query fehlt mir Beispielcode...
Hat das jemand von euch schonmal gemacht, und kann mir hier weiterhelfen??
Wäre klasse.Gruß
-
Fehlt bei
XDocument konfig
nicht noch ein ^?Außerdem ist das nicht ansatzweise Linq.
Man braucht dafür Closures bzw. sonst kann man es nur sehr eingeschängt benutzen.
Du kannst ja einfach ein Programm aus den C# Code im .Net Reflector in C++/CLI übersetzen lassen (klappt vielleicht), dann siehst du was Linq so alles macht.
~EDIT: Mogels Hinweis~
-
Rhombicosidodecahedron schrieb:
Du kannst ja einfach ein Programm aus den C# Code im .Net Reflector in C++/CLI übersetzen lassen (klappt vielleicht),
mit passendem Plugin ja ... ich mache es im Moment gerade anders herum
-
mogel schrieb:
mit passendem Plugin ja
stimmt, hab' angemerkt
mogel schrieb:
ich mache es im Moment gerade anders herum
Von C++/CLI nach C#?
Oder meinst du nibbler?
-
Das stimmt wohl, der gepostete Code hat noch nichts mit Linq zu tun.
Aber die query-Abfrage um oben gezeigten Eintrag wieder zu bekommen gelingt mir nicht....
Direkt dazu passende C#-Beispiele habe ich auch nicht.Wie bekomme ich obigen Eintrag ausgelesen?
-
nibbler schrieb:
Wie bekomme ich obigen Eintrag ausgelesen?
Als was? keyValuePair oder nur Benutzernamen?
Grobe vorhensweise
// aus dem Gedächnis String ^typ, ^name; // Ich bin mir nicht sicher kann mit ^ sein. XElement firstNode = System::Linq::Enumerable::First( // gibt XElement zurück // musst vielleciht noch den generischen Typ mit angeben System::Xml::Linq::Extensions( // gibt IEnumerable<XElement> zurück konfig.Descendants( // gibt IEnumerable<XElement> zurück gcnew System::Xml::Linq::XName("Konfiguration")), gcnew System::Xml::Linq::XName("Login"))); typ = firstNode.Attribute(gcnew System::Xml::Linq::XName("typ")).Value; // vielleicht -> und noch Trimmen name = firstNode.Value;// vielleicht -> und noch Trimmen
-
Rhombicosidodecahedron schrieb:
Von C++/CLI nach C#?
ja ... ich stelle meine DLLs nun auf C# um ... ging mit den letzten beiden DLLs relativ zugüg ... C# kann irgendwie einige Dinge nicht so wie C++/CLI - aber es funktioniert ... da fehlen nur leider die Kommentare
Grund: vgl. entsprechenden Thread "32 Bit vs. 64 Bit"
-
Hallo, und danke für die bisherigen Antworten.
Leider komme ich aber nicht weiter, da ich weder System::Linq habe.
error C3083: "Linq": Das Symbol links neben "::" muss ein Typ sein.
Außerdem kommt bei "gcnew System::Xml::Linq::XName("Konfiguration")" der Fehler, dass es keinen Kopierkonstruktor gibt.
error C3673: "System::Xml::Linq::XName": Die Klasse hat keinen Kopierkonstruktor.
Wo ist jetzt genau das Problem?
-
nibbler schrieb:
Hallo, und danke für die bisherigen Antworten.
Leider komme ich aber nicht weiter, da ich weder System::Linq habe.
error C3083: "Linq": Das Symbol links neben "::" muss ein Typ sein.
Du musst glaube ich "System::" rausnehmen
nibbler schrieb:
Außerdem kommt bei "gcnew System::Xml::Linq::XName("Konfiguration")" der Fehler, dass es keinen Kopierkonstruktor gibt.
error C3673: "System::Xml::Linq::XName": Die Klasse hat keinen Kopierkonstruktor.
Wo ist jetzt genau das Problem?
Sry, hatte MSDN nicht so genau gelesen
MSDN schrieb:
Erstellen eines XName-Objekts
XName enthält keine öffentlichen Konstruktoren. Stattdessen stellt diese Klasse eine implizite Konvertierung von String bereit, die es Ihnen ermöglicht, einen XName zu erstellen.
Hoffendlich klappt das auch in C++/CLI
Außerdem: http://weblogs.asp.net/kennykerr/archive/2006/05/11/The-Linq-between-C_2300_-and-C_2B002B00_.aspx