XmlElement -> Appemdchild



  • Hallo Community,

    ich bin relativ unerfahren mit c# und versuche ein XML Datei zu erzeugen. Hierbei durchlaufe ich mit einer foreach Schleife den gegebenen Text und frage darin mit diversen if Abfragen ab bei welcher Zeile ich mich gerade befinde und dementsprechend erzeuge ich in der if Abfrage ein neues Element. In einer anderen if Abfrage möchte ich nun einzelne Elemente zum vorherigen Element hinzufügen. Nun ist aber das Element der vorhergehenden if Abfrage nicht mehr bekannt. Ist es möglich das in der if Abfrage erstellte Element bekannt zu machen? Oder gibt es da noch elegandere Möglichkeiten die XML zu erzeugen?

    Vielen Dank



  • Mir scheint als wenn das weniger ein Problem mit XML ist sondern das du ein unguenstig gewaehltes Design deiner Abfragen hast.
    Wenn du uns Code praesentierst koennen wir dir sicherlich mehr helfen.



  • foreach (string temp in rechnungcontent)
    {
    
    		if (temp.Trim().Length > 15 && temp.Trim().Substring(0, 6) == "LS.NR." && lieferscheinnummer != temp.Trim().Substring(0, 6).Trim())
    		{
    			lieferscheinnummer = temp.Trim().Substring(7, 6).Trim();
    			lieferscheindatum = temp.Trim().Substring(17, 10).Trim();
    
    		}
    
    		if (temp.Trim().Length > 15 && temp.Trim().Substring(0, 7) == "BST.NR." && bestellnummer != temp.Trim().Substring(8, 15).Trim()) { 
    			bestellnummer = temp.Trim().Substring(8, 15).Trim();
    			bestelldatum = temp.Substring(41, 10).Trim();
    
    			XmlElement deliveryNote = doc.CreateElement("deliveryNote");
    			root.AppendChild(deliveryNote);
    
    			XmlElement lsnumber = doc.CreateElement("number");
    			lsnumber.AppendChild(doc.CreateTextNode(lieferscheinnummer));
    			deliveryNote.AppendChild(lsnumber);
    
    			XmlElement date = doc.CreateElement("date");
    			date.AppendChild(doc.CreateTextNode(lieferscheindatum));
    			deliveryNote.AppendChild(date);
    
    			XmlElement orderNr = doc.CreateElement("orderNr");
    			orderNr.AppendChild(doc.CreateTextNode(bestellnummer));
    			deliveryNote.AppendChild(orderNr);
    
    			XmlElement orderDate = doc.CreateElement("orderDate");
    			orderDate.AppendChild(doc.CreateTextNode(bestelldatum));
    			deliveryNote.AppendChild(orderDate);
    
    		}
    
    		if (temp.Trim().Length > 75 && temp.Trim().Length == 76 || temp.Trim().Length == 77 || temp.Trim().Length == 78)
    		{
    
    			XmlElement number = doc.CreateElement("number");
    			number.AppendChild(doc.CreateTextNode(lieferscheinnummer));
    			[b]deliveryNote[/b].AppendChild(number);
    		}
    
    }
    

    Das letzte Fett gedruckte "deliveryNote" ist nicht mehr bekannt.



  • Das ist ja auch voellig klar das dieser nicht mehr bekannt ist, weil du ihn in einem anderen Scope definiert hast.

    Also ich glaube das Problem laesst sich hier nur mit einem Workaround bearbeiten, was ja nicht der Sinn der Sache ist. Vielleicht solltest du deine Struktur der XML und die deiner Abfragen nochmal ueberdenken und vielleicht sogar noch eine Indirektionsebene dazwischen ziehen um den Code IRGENDWIE lesbarer machen.
    Weil ich erkennen keine gemeinsamkeiten in den If-Abfragen so dass man diese eventuell zusammenziehen kann um deine deliveryNote da irgendwie wieder mit ins Spiel zu bringen.

    Aber vielleicht hat ja jemand anderes noch eie Idee.



  • Okay, hab es umstrukturiert. Ist zwar sicher nicht übersichtlicher geworden, aber es klappt jetzt. An C# muss ich mich wohl erst noch ein paar Tage gewöhnen.

    Danke.


Anmelden zum Antworten