| |
VB.NET - Ein- und UmsteigerRe: LINQ to XML | | | Autor: Grimsey | Datum: 13.10.10 19:44 |
| Ja...bei mir erscheint das Ergebnis in Klammern.
Hab auch ein PNG dazu nur weiß ich nicht, wie ich einen Anhang in den Beitrag einfügen kann.
Ich muss vielleicht noch erwähnen das ich die XML-Datei auf der Festplatte habe und erst lade.
Beitrag wurde zuletzt am 13.10.10 um 19:46:18 editiert. | |
LINQ to XML | | | Autor: Grimsey | Datum: 13.10.10 16:42 |
| Hallo zusammen,
ich beschäftige mich gerade mit XML und LINQ. Alles eine super interessante Sache und ich mache auch Fortschritte. Habe mir bei Galileo-Computing das OpenBook zu VB2010 zu Gemüte geführt und auch viel hier im Forum und auf anderen Seiten gelesen.
Für Übungszwecke habe ich mir eine kleine XML-Datei erstellt mit der ich ein wenig experimentiere.
<?xml version="1.0" encoding="utf-16"?>
<Wetter>
<Stadt>
<Name>Berlin</Name>
<Temperatur>20</Temperatur>
<Feuchte>10</Feuchte>
</Stadt>
<Stadt>
<Name>Plauen</Name>
<Temperatur>10</Temperatur>
<Feuchte>11</Feuchte>
</Stadt>
<Stadt>
<Name>Hof</Name>
<Temperatur>15</Temperatur>
<Feuchte>12</Feuchte>
</Stadt>
</Wetter> Diese möchte ich gerne mit LINQ Abfragen, was im Ansatz auch recht gut und einfach funktioniert.
Private Sub btn_find_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btn_find.Click
Dim XmlDoc As New XDocument
XmlDoc = XDocument.Load("XMl_Test.xml")
Dim Abfrage = From Stadt In XmlDoc.<Wetter>.<Stadt> Where _
Stadt.<Temperatur>.Value > 10
Select Stadt.<Name>
ListBox1.Items.Clear()
For Each Stadt In Abfrage
ListBox1.Items.Add(Stadt.Value)
Next
End Sub Nun meine Frage: ich würde in der Listbox gerne auch den Namen der Stadt ausgeben, für die gestellte Abfrage zutrifft. Mit den mir bekannten Operanden "&" bzw. "+" kann ich leider weder die Abfrage noch die Ausgabe, der gefundenen Einträge, verbinden.
Kann mir jemand einen Tipp geben wo ich nach schauen muss um dies zu bewerkstelligen?
Vielen Dank!
Beitrag wurde zuletzt am 13.10.10 um 16:43:19 editiert. | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 13.10.10 18:29 |
| Ich habe in einem Beispiel eine Möglichkeit der Abfrage mit XPath gefunden...nur würde ich gerne wissen ob dies auch mit LINGQ to XML möglich ist. | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 13.10.10 18:49 |
| Also irgendwie war ich zu blöde die Syntax im 1.Versuch richtig hinzubekommen...anders kann ich mir nicht erklären das es mit dem folgenden Code funktioniert.
Ich war einfach zu blind, entschuldigt bitte.
Dim Abfrage = From Stadt In XmlDoc.<Wetter>.<Stadt> Where Stadt.<Temperatur>.Value > 20
Select Stadt.@Name, Stadt.<Temperatur>.Value, _
Stadt.<Feuchte>.Value
ListBox1.Items.Clear()
For Each i In Abfrage
ListBox1.Items.Add(i.Name & ", " & i.Feuchte & ", " & i.Temperatur)
Next als nächstes geht es dann darum, Datensätze einzufügen, zu verändern und zu löschen.
Mal schauen wie weit ich komme. | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 13.10.10 19:07 |
| Hey super Danke!
Nur ist das Ergebnis dann in { } dargestellt...bei meiner Version erhalte ich nur die Ergebnisse, was mir persönlich so besser gefällt. Aber danke für den Tipp!
Naja im Grunde lese ich ja "nur" die XML-Datei aus und würde den Inhalt gern kombiniert ausgeben.
Im Ende ist mir das ja gelungen.
Beitrag wurde zuletzt am 13.10.10 um 19:29:48 editiert. | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 13.10.10 19:51 |
| ich mache es so
Dim XmlDoc As New XDocument
XmlDoc = XDocument.Load("XMl_Test.xml")
Dim Abfrage = From Stadt In XmlDoc.Descendants("Stadt")
Select Stadt.@Name, Stadt.<Temperatur>.Value, Stadt.<Feuchte>.Value
ListBox1.Items.Clear()
ListBox1.DataSource = Abfrage.ToList Das Ergebnis sind so aus
{Name= Plauen, Temperatur= 10, Feuchte= 11}
.
.
.
Beitrag wurde zuletzt am 13.10.10 um 19:55:26 editiert. | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 13.10.10 20:00 |
| Hab die Lösung!
Der Name ist Deinem XML-File ein Element und bei mir ein Attribut.
Hab das XML-File aus einem anderen Beispiel, daher kommt das.
Gibt es bei so etwas richtig oder falsch??? Also sollte ein Eintrag wie "Name" ein Attribut oder ein Element sein? | |
Re: LINQ to XML | | | Autor: DaveS (Moderator) | Datum: 13.10.10 20:08 |
| Ja, ich habe einen String gebaut mit Select, du eine Structure, was über .ToString() das Ergebnis in Klammern ausgibt. Eine Structure wäre natürlich besser wenn du eher sowas machen willst
Dim Abfrage = From Stadt In XmlDoc.<Wetter>.<Stadt> Where _
Stadt.<Temperatur>.Value > 10
Select Stadt.<Name>.Value, Stadt.<Temperatur>.Value, _
Stadt.<Feuchte>.Value
Dim list = Abfrage.ToList()
ListBox1.DataSource = list
ListBox1.DisplayMember = "Name"
TextBox1.DataBindings.Add("Text", list, "Temperatur")
TextBox2.DataBindings.Add("Text", list, "Feuchte") ________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 13.10.10 20:25 |
| ah interessant.
wie sieht die Form dann aus, wenn das Programm läuft?
Ergibt das dann eine zeilenweise Auflistung? | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 13.10.10 20:38 |
| aaahh...schicke Sache....das geht sogar schon in die Richtung auf die ich es später mal abgesehen habe ;)
Muss ich 2nur" noch die Daten ändern und neue hinzufügen bzw. löschen ;)
Damit werde ich mich dann die kommenden Abenden beschäftigen.
Hab vielen Dank für die Ratschläge und Hinweise!!!
Beitrag wurde zuletzt am 13.10.10 um 20:44:17 editiert. | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 14.10.10 20:49 |
| Guten Abend noch einmal,
ich versuche nun schon ein Weilchen einen Eintag in der XML-Datei zu ändern bzw. einen neuen hinzuzufügen.
Trotz intensiver Recherche bei Microsoft und in der Hilfe mache ich noch immer etwas falsch. Ich finde leider nirgendwo beschrieben, wie die Syntax für die Befehle zum Löschen bzw. Eintragen genau lauten muss.
Hier mal meine Versuche, mit denen es nicht klappt.
Eintrag einfügen:
Dim XmlDoc As New XDocument
XmlDoc = XDocument.Load("XML_Test.xml")
Dim neuerEintrag = New XElement("Stadt",
New XAttribute("Name", "neue Stadt"),
New XElement("Temperatur", "neuerWert"),
New XElement("Feuchte", "neuerWert")
)
neuerEintrag.Add(From Stadt In XmlDoc.Descendants("Stadt")
Select Stadt)
XmlDoc.Save("XML_Test.xml") Eintrag ändern:
Dim XmlDoc As New XDocument
XmlDoc = XDocument.Load("XML_Test.xml")
Dim Abfrage = From Stadt In XmlDoc.Descendants("Stadt")
Select Stadt.SetElementValue("Temperatur", 20) Hat nicht jemand vielleicht einen Tipp wo ich vielleicht eine Seite finde wo dies für VB beschrieben ist? Ich will hier ja auch nicht ständig mit meinen Problemen nerven.
Auf den Hilfeseiten von Microsoft finde ich keine für mich ausreichenden Beispiele.
EDIT:
ich habs jetzt nochmal damit probiert, ich denke das ist schon etwas richtiger, funktioniert leider immer noch nicht
Dim XmlDoc As New XDocument
XmlDoc = XDocument.Load("XML_Test.xml")
Dim neuerEintrag = New XElement("Stadt",
New XAttribute("Name", "neueStadt"),
New XElement("Temperatur", "neuerWert"),
New XElement("Feuchte", "neuerWert")
)
XmlDoc.Add(neuerEintrag.Elements("Stadt"))
XmlDoc.Save("XML_Test.xml")
Beitrag wurde zuletzt am 14.10.10 um 21:14:42 editiert. | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 14.10.10 21:52 |
| Also die XML Datei wird durch den Code schon in irgendeiner Weise verändert nur leider kommt kein neuer Eintrag dazu. Ich kann das mit Notepad++ nachvollziehen. Da bekomme ich nach dem Versuch einen Eintrag hinzuzufügen die Meldung das die Datei geändert wurde.
So schwer kann das mit dem Einfügen und Ändern doch nicht sein...ich hab wohl nen mächtiges Brett vorm Kopf.
Dim XmlDoc As New XDocument
XmlDoc = XDocument.Load("XML_Test.xml")
Dim neuerEintrag = New XElement("Stadt",
New XAttribute("Name", "neueStadt"),
New XElement("Temperatur", "neuerWert"),
New XElement("Feuchte", "neuerWert")
)
XmlDoc.Add(neuerEintrag)
XmlDoc.Save("XML_Test.xml") Bei dem Versuch bekomme ich die Fehlermeldung das dadurch ein falsch strukturiertes Dokument entstehen würde.
Das Dokument hat noch den gleichen Aufbau wie bei den Beiträgen von gestern.
Muss da noch eine Angabe hinein, wo das Element eingefügt werden soll???? Muss man da vorher noch eine Abfrage machen???
Beitrag wurde zuletzt am 14.10.10 um 22:02:24 editiert. | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 14.10.10 22:18 |
| Oh mann!!!!....danke wieder einmal....es geht sogar ohne die Abfrage danach...der Ort ist halt schon wichtig...
stelle ich mich nur so doof an oder woran liegt das? die Erklärungen von MS sind immer etwas dürftig und halt für Profis gemacht (meine Meinung). So ne schicke Übersicht mit einfachen Beispiele, so wie Du das postest, wäre mal ideal. | |
Re: LINQ to XML | | | Autor: Grimsey | Datum: 15.10.10 13:45 |
| Nein die kenne ich leider nicht.
Dein Link führt mich immer wieder auf diesen Beitrag hier | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|