Autor |
Beitrag |
Eagle92
      
Beiträge: 31
|
Verfasst: Di 19.07.11 09:50
Hallo Liebe Entwicklergemeinschaft,
Folgendes Problem bietet sich mir:
Ich soll so was wie einen Zeiger für meinen XML-Parser Deklarieren. Also es soll ein Identifikator sein der Datensätze zählt und dem Benutzer dann ausgibt. Besser wenn ich das mal anhand meiner XML-Datei beschreibe.
( ! Dabei ist bitte zu beachten das sich diese Struktur ins endlose fortsetzen kann ! )
Der User gibt also zum beispiel Modul 2 an
XML-Daten 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| <ModuleName>Modul_2</ModuleName> <- Mit diesem Block soll gearbeitet werden. <GroupName>Group_2</GroupName>
<Output> <Instanz> <InstanzName>Instanz_5</InstanzName> <VariableName>Variable_7</VariableName> <VariableType>double</VariableType> <InitialValue>15.2</InitialValue> <- Identifikator speichert hier und rechnet jedesmal +1
<InstanzName>Instanz_5</InstanzName> <VariableName>Variable_8</VariableName> <VariableType>int</VariableType> <InitialValue>306</InitialValue> </Instanz> |
Das Problem was sich mir bietet ist einfach nur der Verweis auf den ModulNamen, kann mir da wohl jemand helfen ?
Ergebnis soll dann einfach so aussehen:
Welches Modul möchten sie ?
(User eingabe)
Ausgabe des Moduls.
Ausgabe des identifikators der Datensätze die es davor gibt,
Ausgabe des Identifikators der Datensätze die sich im Modul befinden.
Danke im Vorraus !
Mit freundlichen Grüßen
Patrick
Moderiert von Christian S.: XML-Tags hinzugefügt
|
|
Eagle92 
      
Beiträge: 31
|
Verfasst: Di 19.07.11 17:33
hm... fast 50 Hits und keiner weiß Rat ? soll ich das ganze vielleicht noch ein bisschen genauer erläutern oder scheint das problem wirklich nen harter brocken zu sein ?
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 19.07.11 17:40
Hast du dich denn schon einmal mit einer XML-API auseinandergesetzt? XElement bringt z.B. genügend Navigationsmöglichkeiten mit, durch die du dein Programm umsetzen können solltest.
_________________ >λ=
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Di 19.07.11 20:57
Hallo,
Eagle92 hat folgendes geschrieben : | ( ! Dabei ist bitte zu beachten das sich diese Struktur ins endlose fortsetzen kann ! ) |
Inwiefern?
Können innerhalb der XML n Module enthalten sein, und innerhalb des Moduls dann n Gruppen,
innerhalb einer Gruppe dann 1 Output- und 1 Input-Element, innerhalb eines dieses Elementes dann n Instanzen,
wobei eine Instanz n Variablen hat?
Dann ist die Struktur nicht wiklich gut! Denn es fehlen entscheidene Knoten. Für jede Sache muss ja quasi ein Knoten vorhanden sein. Und alles, was n Male vorkommen kann, muss ja in einer Gruppe (also wieder ein Knoten) zusammengefasst werden.
Und dann ist eine Abfrage per LinQ gar kein Problem mehr. Ich sage nicht, dass es auch nicht mit einer anderen Struktur gehen würde, aber dazu müsste man erstmal mehr wissen.
Eine ordentliche Struktur könnte jedenfalls wie folgt aussehen (wobei auch manche Elemente zu Attributen gemacht werden könnten, was auch wieder überichtlicher wäre)
XML-Daten 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| <Module> <Modul> <ModulName>Modul_1</ModuleName> <Gruppen> <Gruppe> <Gruppenname>Gruppe_1</Gruppenname> <Output> <Instanzen> <Instanz> <InstanzName>Instanz1</InstanzName> <Variablen> <Variable> <VariableName>Variable_1</VariableName> <VariableType>double</VariableType> <InitialValue>15.2</InitialValue> </Variable> </Variablen> </Instanz> </Instanzen> </Output> <Input> ... </Input> </Gruppe> </Gruppen> </Modul> </Module> | Erstellst Du die XML denn selbst? Oder woher kommt sie?
LG
|
|
Eagle92 
      
Beiträge: 31
|
Verfasst: Mi 20.07.11 11:43
Die Datei habe ich so bekommen und soll sie auch nicht verändern, beziehungsweise müsste ich das dann mit allen leuten absprechen die auch damit dann arbeiten, da es ja dann um die form der speicherung für die Daten geht. Das Ding sollte bis morgen stehen, deswegen ist das kein guter weg mehr ^^
Kha hat folgendes geschrieben : | Hast du dich denn schon einmal mit einer XML-API auseinandergesetzt? XElement bringt z.B. genügend Navigationsmöglichkeiten mit, durch die du dein Programm umsetzen können solltest. |
XML-API ? was ich ein bisschen herausgefunden habe ist, das ich mit ".Name" und ".Value" auf bestimmte sachen zugreifen rausgreifen kann, allerdings habe ich eine neue Idee zu diesem Thema
ist es mir möglich zum beispiel anhand von </Output> die sache zu beenden ?
In der Praxis würde das dann so aussehen:
XML-Daten 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| <Output> <Instanz> <InstanzName>Instanz_1</InstanzName> <VariableName>Variable_1</VariableName> <VariableType>double</VariableType> <InitialValue>15.2</InitialValue>
<InstanzName>Instanz_1</InstanzName> <VariableName>Variable_2</VariableName> <VariableType>int</VariableType> <InitialValue>306</InitialValue> </Instanz>
<Instanz> <InstanzName>Instanz_2</InstanzName> <VariableName>Variable_3</VariableName> <VariableType>long</VariableType> <InitialValue>54418</InitialValue> </Instanz> </Output> -> Block Ende. |
Das ich mir quasi bis da alles ausgeben lasse was ich brauche. Nur der Befehl fehlt mir leider dafür ...
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 20.07.11 12:07
Eagle92 hat folgendes geschrieben : | XML-API ? |
Ja, eine... API für... XML eben  . Nachdem du dich ein wenig mit XElement/Linq to XML auseinandergesetzt hast, wirst du sehen, dass es überhaupt kein Problem ist, alle Kindknoten eines Elementes "Output" aufzuzählen.
_________________ >λ=
|
|
Eagle92 
      
Beiträge: 31
|
Verfasst: Mi 20.07.11 12:14
|
|
Eagle92 
      
Beiträge: 31
|
Verfasst: Mi 20.07.11 12:22
ach und bezüglich
Trashkid2000 hat folgendes geschrieben : | Hallo,
Eagle92 hat folgendes geschrieben : | ( ! Dabei ist bitte zu beachten das sich diese Struktur ins endlose fortsetzen kann ! ) | Inwiefern?
Können innerhalb der XML n Module enthalten sein, und innerhalb des Moduls dann n Gruppen,
innerhalb einer Gruppe dann 1 Output- und 1 Input-Element, innerhalb eines dieses Elementes dann n Instanzen,
wobei eine Instanz n Variablen hat?
|
ich meine damit das man da endlos viele Module dran gehängt werden können, die Struktur bleibt die gleiche.
Die Inhalte der Instanzen könnten auch um die gleichen Nodes, also Datensätze erweitert werden, das spielt aber keine Rolle. das habe ich schon geprüft und funktioniert wunderbar.
was halt für mich wichtig in der XML-Datei ist, ist dieser bereich:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| <ModuleName>Modul_1</ModuleName> -> Ab hier <GroupName>Group_1</GroupName> <Output> <Instanz> <InstanzName>Instanz_1</InstanzName> <VariableName>Variable_1</VariableName> <VariableType>double</VariableType> <InitialValue>15.2</InitialValue>
<InstanzName>Instanz_1</InstanzName> <VariableName>Variable_2</VariableName> <VariableType>int</VariableType> <InitialValue>306</InitialValue> </Instanz>
<Instanz> <InstanzName>Instanz_2</InstanzName> <VariableName>Variable_3</VariableName> <VariableType>long</VariableType> <InitialValue>54418</InitialValue> </Instanz> </Output> <Input> <Instanz> <InstanzName>Instanz_3</InstanzName> <VariableName>Variable_4</VariableName> <VariableType>double</VariableType>
<InstanzName>Instanz_3</InstanzName> <VariableName>Variable_5</VariableName> <VariableType>int</VariableType> </Instanz>
<Instanz> <InstanzName>Instanz_4</InstanzName> <VariableName>Variable_6</VariableName> <VariableType>long</VariableType> </Instanz> </Input> -> bis hier ist Relevant für das Programm |
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 20.07.11 14:02
Eagle92 hat folgendes geschrieben : | so was meinst du bestimmt ^^ |
Ja. Dann solltest du es doch jetzt schaffen, das richtige Modul auszuwählen und die relevanten Teile davon auszugeben.
_________________ >λ=
|
|
Eagle92 
      
Beiträge: 31
|
Verfasst: Mi 20.07.11 14:12
Eben nicht ^^ genau da liegt mein problem >.<
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Do 21.07.11 07:37
Guten Morgen,
habe jetzt eigentlich imer noch nicht begriffen, worin genau das Problem besteht.
Einfach nur das Element zu finden, dessen Namen der User eingegeben hat?
Vielleicht hilft Dir das weiter:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| List<XElement> moduleElements = doc.Descendants("ModuleName").ToList(); XElement selectedModule = moduleElements.FirstOrDefault(x => x.Value == userInput); if (selectedModule != null) { int selectedModuleNumberOfDoc = moduleElements.IndexOf(selectedModule);
XElement groupElement = (XElement)selectedModule.NextNode; XElement outputNode = (XElement)groupElement.NextNode; XElement inputNode = (XElement)outputNode.NextNode;
} | Die Abfrage sieht nicht ganz so toll aus, das die Struktur so... ist. Aber Du hast ja gemeint, dass es sich im Moment nicht ändern lässt.
Hoffe, dass es das war, was Du benötigt hast.
LG
|
|
Eagle92 
      
Beiträge: 31
|
Verfasst: Do 21.07.11 11:49
Hallo Trashkid,
Leider ist mir damit nicht geholfen =( ich hab einen eigenen Ansatz den ich dir mal rein stellen kann vielleicht hilft der dir für dein Verständnis meines Problems.
(entschuldige, ich krieg es irgend wie nicht auf die reihe es besser zu beschreiben.)
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| foreach (var ModuleNameElement in rootElement.Elements("ModuleName")) { ModuleName = ModuleNameElement.Value; if (ModuleName == Modulconfig) { tempModul = ModuleName; string SubModuleName = tempModul.Substring(6, 1); foreach (var ModuleElement in rootElement.Elements("Output")) { foreach (var productNode in ModuleElement.Elements()) { foreach (var variableNode in productNode.Elements()) { data.TypCalculationOutput(variableNode); } } } } else { loops(rootElement); }
} |
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Do 21.07.11 15:21
Hallo,
Eagle92 hat folgendes geschrieben : | ich hab einen eigenen Ansatz den ich dir mal rein stellen kann vielleicht hilft der dir für dein Verständnis meines Problems. |
Sorry, leider weiß ich immer noch nicht, wo genau das Problem liegt, was Du genau erreichen willst, oder wo Du nicht weiterkommst.
Eagle92 hat folgendes geschrieben : | (entschuldige, ich krieg es irgend wie nicht auf die reihe es besser zu beschreiben.) |
Naja, bloß wie soll man denn dann weiterhelfen?
|
|
Th69
      

Beiträge: 4799
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 21.07.11 15:39
Hallo Eagle92,
ein bißchen mehr Eigeninitiative wäre ganz nett.
Also deine XML-Datei sieht so aus:
XML-Daten 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| <ModuleName>Modul_1</ModuleName> <GroupName>Group_1</GroupName>
<Output> ... </Output> <Input> ... </Input>
<ModuleName>Modul_2</ModuleName> <GroupName>Group_2</GroupName>
<Output> ... </Output> <Input> ... </Input>
... |
???
Dann kann nur der Ansatz von Trashkid2000 mittels "NextNode" funktionieren. Denn du willst doch nur die <Output> und <Input>-Knoten auslesen, welche direkt unterhalb der <ModuleName> bzw. <GroupName>-Elemente sind, oder?
|
|