Announcement

Collapse
No announcement yet.

Attribute aus XML lesen mit LINQ To XML

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Attribute aus XML lesen mit LINQ To XML

    Hallo zusammen,

    ich versuche (mittlerweile) verzweifelt ein XML mit LINQ zu lesen.
    Als Ergebnis möchte ich die Values von einem bestimmten Attribut haben, das in mehreren Elementen vom gleichen Typ vorkommt. Also eine Auflistung sozusagen.

    Mein XML hat unter anderen mehrere solche Einträge:
    [highlight=xml]
    <Ctl_Button Top="92" Left="636" Width="37" Height="25" Name="" Align="0" Returnstring="leer" Transparent="0" Tabindex="27">
    <Caption>
    <Language Name="DE" V1="" />
    <Language Name="EN" V1="" />
    <Language Name="FR" V1="" />
    </Caption>
    <Picture> bitmaps\loeschen.BMP </Picture>
    <Font Name="Arial" Size="8" Bold="-1" Italic="0" Underline="0" Color="0x0" />
    </Ctl_Button>
    [/highlight]

    Ich möchte jetzt aus diesem Element Ctl_Button das Value des Attributes Returnstring haben. Und das für alle Elemente vom Typ Ctl_Button

    Mein Code zum lesen sieht so aus:
    [highlight=csharp]
    var xmlValue = XElement.Load("Mein.xml");
    var returnValues = from a in xmlValue.Elements()
    select a.Element("Ctl_Button");

    foreach (var element in returnValues.Elements())
    {
    string returnValue = element.Attribute("Returnstring").Value;
    Console.WriteLine(returnValue);
    }
    [/highlight]
    Da bekomme ich aber nur eine Null-Referenz-Exception zurück

    Kann mir jemand sagen, was ich anders machen muss? Mir fällt nichts mehr ein
    Zuletzt editiert von Andreas Mahr; 23.08.2010, 14:32.

  • #2
    Hallo,

    [highlight=c#]
    var returnStrings = from e in xml.Descendants("Ctl_Button")
    select (string)e.Attribute("Returnstring");
    [/highlight]

    Der Unterschied zwischen Elements und Descendantes ist zu beachten.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Ah, ok danke, das kannte ich noch nicht.

      In meinem Fall bekomme ich jetzt ca. 250 Einträge in der Collection geliefert. Davon sind 245 "Null" und die restlichen 5 die, die ich suche.

      Wo kommen die ganzen Null-Values her? Sind das die Elemente die kein Attribut Returnstring haben? Hmm...wäre aber auch n bissken viel glaub ich.

      Comment


      • #4
        Hallo,

        Wo kommen die ganzen Null-Values her
        Das sind die Einträge wo zum Element "Ctl_Button" kein entsprechende Attribut vorhanden ist.

        Ändere die Query zu:
        [highlight=c#]
        var returnStrings = from e in xml.Descendants("Ctl_Button")
        let rs = (string)e.Attribute("Returnstring")
        where !string.IsNullOrEmpty(rs)
        select rs;
        [/highlight]
        Also mit null-Check.


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          ok, danke.

          Eine letzte Frage noch. Wie müsste es aussehen, wenn zusätzlich zu Ctl_Button auch noch Ctl_Picture untersucht werden soll?

          Comment


          • #6
            Hallo,

            in der selben Query?

            Entweder über ein union oder wenn der Aufbau gleich ist so in etwa
            [highlight=c#]
            var returnStrings = from e in xml.Descendants()
            where e.Name == "Ctl_Button" || e.Name == "Ctl_Picutre"
            ... // wieder gleich wie vorher
            [/highlight]


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              ok, hab vielen Dank

              Comment

              Working...
              X