Laden...

XML mit Linq rekursiv durchlaufen

Erstellt von cpetit vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.551 Views
C
cpetit Themenstarter:in
54 Beiträge seit 2007
vor 14 Jahren
XML mit Linq rekursiv durchlaufen

Hallo,
bräuchte mal Hilfe von euch.

Ich möchte gerne eine XML mit Linq rekursiv durchlaufen und stehe total auf dem Schlauch wie ich vorgehen soll.

Fange gerade an mich in Linq einzulesen und deshalb suche ich Hilfe.

X
1.177 Beiträge seit 2006
vor 14 Jahren

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

C
cpetit Themenstarter:in
54 Beiträge seit 2007
vor 14 Jahren

Zuerst mal danke für die Links.

Komme aber trotzdem nicht weiter. Ich möchte jetzt gerne die Where-Klausel gerne auf das Attribute("V") des Elements("hnr") anwenden.

Habe es so probiert das brachte aber einen Fehler :
where hnr.Element("hnr").Attribute("V").Value == "7310950000"

Einen Tipp für mich?


           try
            {
                var hnrs = from hnr in xml_Doc.Elements("body").Elements("hnr_liste").Elements("hnr").Elements("bsnr")
                           where hnr.Attribute("V").Value == "731095000"
                           select new
                           {
                               vBsnr = hnr.Attribute("V").Value,
                               vtBsnr = hnr.Attribute("VT").Value
                           };

                foreach (var hnr in hnrs)
                {
                    Console.WriteLine(" BSNR V: " + hnr.vBsnr + "  BSNR VT: " + hnr.vtBsnr);
                }
            }
            catch (NullReferenceException ex)
            {
                MessageBox.Show(ex.Message);
            }
5.941 Beiträge seit 2005
vor 14 Jahren

Hallo cpetit

Es wäre nützlich, wenn du sagst was für ein Fehler du bekommst.
Abgesehen davon sieht man das ja jetzt am Code, wobei ich dich auf [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt verweisen kann.

Zerstückle die Abfrage mal auf einzelne Zeilen und nutze den Debugger um zu schauen was null ist, dann überlegst du logisch und behebst den Fehler.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

C
cpetit Themenstarter:in
54 Beiträge seit 2007
vor 14 Jahren

Habe noch ein paar Probleme.

Ich habe zwei xml-Dateien die ich gerne vergleichen will.

Habe bis jetzt folgendes gemacht.

Durchlaufe XML-1 und merke mir bei jedem durchlauf einen Wert den es in der XML auch nur einmal gibt. Dann filter ich mit der Where-Klausel beide XML und schreibe das Ergebnis jeweils in ein neues XElement.

Jetzt wollte ich beide XElement miteinander vergleichen mit "XNodeDocumentOrderComparer" der sagt mir aber das er nur XElemente aus der gleichen XML vergleichen kann. Sofern ich die Fehlermeldung richtig deuten kann.

System.InvalidOperationException {"Ein gemeinsames Vorgängerelement ist nicht vorhanden."}

Gibt es was anderes für die XElemente zu vergleichen?

C
cpetit Themenstarter:in
54 Beiträge seit 2007
vor 14 Jahren

So das mit dem vergleichen habe ich hinbekommen.

Was ich noch nicht hinbekommen habe ist das durchlaufen aller Elemente eines XElements.

Hat da jemand für mich einen Tipp wie ich das XElement rekursiv durchlaufen kann?