Laden...

Daten suchen in XML-File mit XElement ??

Erstellt von oehrle vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.511 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Daten suchen in XML-File mit XElement ??

verwendetes Datenbanksystem: <MSSQLExpress 2008>

Hi, habe ein Problem mit LINQ und XElement. Ich möchte das nachfolgende File (habe es nachfolgende beigefügt) den Wert von <P02_01> auslesen. Kriegs aber nicht gebacken, da ich mit LINQ auch noch nicht so frisch bin. Kann mir da jemand Beistsand leisten?


<?xml version="1.0" encoding="utf-8"?>
<Parameterfile>
  <Parameterdaten>
    <Diameters Numberrange="1" />
    <AxialLength Numberrange="2">
      <P2_01>24.3</P2_01>
      <P2_02>20</P2_02>
    </AxialLength>
    <RadialLength Numberrange="3">
      <P3_01>23.5</P3_01>
      <P3_02>19.01</P3_02>
    </RadialLength>
    <AnglesDimensions Numberrange="4" />
</Parameterdaten>
</Parameterfile>

Hier meine Abfrage. Funktioniert leider nicht. Entweder ich muß die Abfrage noch weiter verschachteln oder ich bin zu blöd für LINQ. Irgendwie muß ich an den Wert des Elemtes <P02_01> kommen .Value muß das sein.

Eigentlich habe ich gedacht dass es mit XElement auch relativ einfach sein sollte, weil man damit auch sehr toll und einfach XML-Files erstellen kann.


 private void btn_XmlLaden3_Click(object sender, EventArgs e)
        {

            textBox2.Clear();
            textBox1.Clear();

            // XDocument xdoc = XDocument.Load(@"c:\testStruktur.xml");

            XElement root = XElement.Load(@"c:\testStruktur.xml");


            var test = from el in root.Descendants()
                       where el.Name.ToString() == "P02_01"
                       select el;


            textBox1.Text = (string) test.Value;        /// Wie bekomme ich mit LINQ den Wert von <P02_01> ?????


        }

Hat jemand den treffenden Tipp für mich?

L
95 Beiträge seit 2009
vor 13 Jahren

Kann es vllt. sein, dass du nach "P02_01" suchst, welches aber "P2_01" heißt...?

Mfg Marc

U
1.578 Beiträge seit 2009
vor 13 Jahren

Was soll den der Quatsch?

Warum holst du dir alle Nodes und vergleichst den namen? Hol dir doch direkt den Node anhand des namens.

=> Das sind doch absolute Basics.

var test = root.Descendants("P2_01").FirstOrDefault();
if (test != null)
{
textBox1.Text = test.Value;
}

PS. Strings braucht man nicht nochmal zu strings machen, ich denk da an dein el.Name.ToString() oder (string) test.Value

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Falscher Eintrag in echtem Programm korrekt

Nain daran liegts nicht. Dies war eine abgewandelte Form fürs Forum, da ist mir leider der Fehler passiert.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Funktioniert !!

Super CSL, deine Lösung funzt. Natürlich schreibe ich das Quatsch, aber in der ganzen Hilfe von MSDN findet man auch kein solches Beispiel. Anahnd solcher Lösungen findet man dann auch selber wieder weiter . Bin aber bisher auf keinen rünen Zweig gekommen, da kann man auch gerne mal resignieren. Danke dir für die Hilfe.