Laden...

LINQ to XML: Kein Ergebnis bei auslesen

Erstellt von dust258 vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.340 Views
D
dust258 Themenstarter:in
32 Beiträge seit 2009
vor 12 Jahren
LINQ to XML: Kein Ergebnis bei auslesen

Hallo Leute,
ich arbeite mich im Moment ein wenig in LINQ to XML ein (anhand verschiedener Tutorials). Dafür habe ich folgenden Beispielcode geschrieben:

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            string xmlFileName = "test.xml";
            XDocument xdoc;

            if (File.Exists(xmlFileName))
            {
                xdoc = XDocument.Load(xmlFileName);
            }
            else
            {
                xdoc = new XDocument(
                    new XElement("TextXMLDoc",
                        new XElement("Liste",
                            new XElement("Item",
                                new XAttribute("id", "A"),
                                new XAttribute("name", "Wert1")),
                          
                            new XElement("Item",
                                new XAttribute("id", "B"),
                                new XAttribute("name", "Wert2")
                              )
                        )
                    )
                 );
            }


            var ItemCollection = from Item in xdoc.Descendants("Item")
                                  where Item.Element("id") != null && Item.Element("name") != null
                                  select new XMLItem
                                  {
                                      Id = Item.Element("id").Value,
                                      Name = Item.Element("name").Value
                                  };


            foreach (XMLItem item in ItemCollection)
            {
               MessageBox.Show(item.Name); //Hier sollte eine Message ausgegeben werden, passiert aber nix
            }
            xdoc.Save(xmlFileName);
        }
    }
    public class XMLItem
    {
        public string Id
        {
            get;
            set;
        }

        public string Name
        {
            get;
            set;
        }
    }

Die XML wird am Ende ordnungsgemäß abgespeichert:

 <?xml version="1.0" encoding="utf-8" ?> 
- <TextXMLDoc>
- <Liste>
  <Item id="A" name="Wert1" /> 
  <Item id="B" name="Wert2" /> 
  </Liste>
  </TextXMLDoc>

Die "ItemCollection" ist allerdings leer... Kann mir Jemand sagen welchen Fehler ich mache?

Wenn du dich mit dem Teufel einlässt...
verändert sich nicht der Teufel...
der Teufel frisst deine Waffeln...

A
350 Beiträge seit 2010
vor 12 Jahren

Hi,

kalr :
Du musst dich durch deine XML Datei "durchhangeln" :

Erst den Node "TextXMLDoc" dann den Node "Liste" und dann erst kommst du an deine Items.

Grüße

D
dust258 Themenstarter:in
32 Beiträge seit 2009
vor 12 Jahren

Danke für die Hilfe.

Der Fehler lag allerdings darin, das ich Attribut und Element vertauscht habe:

            var ItemCollection = from Item in xdoc.Descendants("Item")
                                 where Item.Attribute("id") != null && Item.Attribute("name") != null
                                  select new XMLItem
                                  {
                                      Id = Item.Attribute("id").Value,
                                      Name = Item.Attribute("name").Value
                                  };

Wenn du dich mit dem Teufel einlässt...
verändert sich nicht der Teufel...
der Teufel frisst deine Waffeln...

A
350 Beiträge seit 2010
vor 12 Jahren

Oops,
das habe ich aber nun auch übersehen.

Grüße