Fragensteller
Bestehende XML Datei auslesen/parsen - Ansätze

Frage
-
Hallo,
ich muss eine XML Datei auslesen.
<Data> <RefDef> Marke3 </RefDef> <Text> DB0815 </Text> <X-Koord> -274,05 </X-Koord> <Y-Koord> 108,28 </Y-Koord> <Angle> 0 </Angle> <Layer> 4 </Layer> <Contour> <item> -653.550; +115.880; </item> <item> -648.350; +115.880; </item> <item> -648.350; +110.680; </item> <item> -653.550; +110.680; </item> <item> -653.550; +115.880; </item> </Contour> <Contour2> <item value="03.02.13" field="PRODDATUM" name="prodDate" /> <item value="03.02.13" field="PRODDATUM" name="prodDate" /> <item value="03.02.13" field="PRODDATUM" name="prodDate" /> </Contour2> </Data> <Data>
Import über den xsd Editor - klar.
Wie komme ich nun idealerweise an die items?
help += drItem.item_Text;
Wie teile ich den String auf? Split?
-653.550; +115.880;
Prinzipiell geht es, denke jedoch, dass es da evtl. elegantere Lösungen gibt.
Kurzum, welche Technik empfiehlt sich...?
Danke und Grüße Andy.
------------
foreach (DMYX.DataRow dR in ImportPanel.Data) { help += string.Format("PosX = {0}, PosY = {1}, Name = {2:0000000}, RefDes = {3}\r\n", Convert.ToDouble(dR._X_Koord), Convert.ToDouble(dR._Y_Koord), dR.Text.PadLeft(10, ' '), dR.RefDes.PadLeft(10, ' ')); foreach (DMYX.ContourRow drContour in ImportPanel.Contour) { if ( drContour.Data_Id == dR.Data_Id ) { foreach (DMYX.itemRow drItem in ImportPanel.item) { if (drItem.Contour_Id == drContour.Data_Id) { help += drItem.item_Text; } } } } z++; }
Alle Antworten
-
Ich bevorzuge den Klassenansatz. D.h. mit xsd.exe /c die Klassen aus dem Schema für diese XML-Dateien erzeugen und mit normaler Deserialisierung laden.
-
Ich bevorzuge den Klassenansatz. D.h. mit xsd.exe /c die Klassen aus dem Schema für diese XML-Dateien erzeugen und mit normaler Deserialisierung laden.
Hallo Stefan,
ok, wie würde das dann konkret aussehen?
Bin da schon offen. Wie lese ich die Datei dann ein? Wie greife ich geschickt darauf zu?
Optimal wäre der Vergleich.
foreach (DMYX.ContourRow drContour in ImportPanel.Contour) { if ( drContour.Data_Id == dR.Data_Id ) { foreach (DMYX.itemRow drItem in ImportPanel.item) { if (drItem.Contour_Id == drContour.Data_Id) { help += drItem.item_Text; } } } }
Ist gefühlt etwas umständlich, ja. Problem, wie macht man es besser......?
Grüße Andy
- Bearbeitet Andy Bauer Mittwoch, 20. Februar 2013 21:46 Format
-
-
Hallo Stefan,
http://www.codeproject.com/Articles/12886/Simplifying-Serialization-and-De-serialization-Prook ich denke das ist Geschmackssache.
Gefühlt ist das über in Dataset einfacher.
Was gängiger ist, weiß ich nicht.Ich kann über ein Dataset sehr gut zugreifen.
Müsste man das untere, evtl. über LinQ machen.
Primär-/Fremdschlüssel kommen ja dort ins Spiel.Wobei das bei mir das gleiche macht
xsd.exe /c oder nur xsd.exe Die XSD sieht gleich aus.
Grüße Andy
P.S. Nichts desto trotz müsse ich so was dann mit LinQ machen?
foreach (DMYX.ContourRow drContour in ImportPanel.Contour) { if ( drContour.Data_Id == dR.Data_Id ) { foreach (DMYX.itemRow drItem in ImportPanel.item) { if (drItem.Contour_Id == drContour.Data_Id) { help += drItem.item_Text; } } } }