Autor
|
Thema: xml Zugriff - xpath (1438 mal gelesen)
|
h4wk Mitglied
Beiträge: 15 Registriert: 20.02.2014
|
erstellt am: 28. Feb. 2014 15:40 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Community, ich habe ein kleines Problem, denke aber, dass es für die meisten hier sehr schnell zu lösen ist. Könntet Ihr mir verraten, wie man auf die Fett/Kursiv geschriebenen Elemente im Folgenden XML-File per XPath zugreifen kann? ich hätte gedacht das es irgendwie so gehen sollte: print XMLSchnittstelle.holeKnoten("dataExport"); (XMLSchnittstelle ist meine XML Schnittstelle mit der Verknüpfung auf mein XML-File) <?xml version="1.0" encoding="UTF-8"?> <dataExport id="1337" > <measurements> <measurement id="1" name="MessungEins"> <description>MeineErsteBeschreibung</description> <measurevalues> <val id="1" normtime="2010-01-01 00:15:00" value="500"/> <val id="1" normtime="2010-01-01 00:17:00" value="700"/> </measurevalues> </measurement> <measurement id="2" name="MessungZwei"> <description>MeineZweiteBeschreibung</description> <measurevalues> <val id="2" normtime="2010-01-01 00:18:00" value="800"/> <val id="2" normtime="2010-01-01 00:19:00" value="900"/> </measurevalues> </measurement> </measurements> </dataExport> Danke für die Hilfe
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 02. Mrz. 2014 23:52 <-- editieren / zitieren --> Unities abgeben: Nur für h4wk
zunächst: holeKnoten gibt die Werte als table zurück, um Ihre description auszulesen, müsste das wie folgt aussehen: Code:
is tbl:table; do XMLSchnittstelle.öffneDokument; -- hole knoten gibt eine tabelle zurück tbl:=XMLSchnittstelle.holeKnoten("/dataExport/measurements/measurement[@id='1']/description",1); XMLSchnittstelle.schließen; --mach was mit der tabelle end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
h4wk Mitglied
Beiträge: 15 Registriert: 20.02.2014
|
erstellt am: 03. Mrz. 2014 08:23 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antwort. Das hilft mir schon weiter Eine Frage hätte ich jedoch noch. Wie genau kann ich zum Beispiel den namen aus einem solchen Element lesen? <measurement id="1" name="MessungEins">
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 03. Mrz. 2014 08:58 <-- editieren / zitieren --> Unities abgeben: Nur für h4wk
|
h4wk Mitglied
Beiträge: 15 Registriert: 20.02.2014
|
erstellt am: 03. Mrz. 2014 09:43 <-- editieren / zitieren --> Unities abgeben:
|
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 03. Mrz. 2014 09:49 <-- editieren / zitieren --> Unities abgeben: Nur für h4wk
Sie können mit <tabelle>.öffneDialog die Tabelle anzeigen lassen. In die Untertabelle kommen Sie mit einem weiteren Paar eckiger Klammern: Code:
is tbl:table; do XMLSchnittstelle.öffneDokument; -- hole knoten gibt eine tabelle zurück tbl:=XMLSchnittstelle.holeKnoten("/dataExport/measurements/measurement[@id='1']",1); XMLSchnittstelle.schließen; --tabelle öffnen tbl.öffneDialog; --name in Konsole schreiben print tbl[4,1][2,2]; end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
h4wk Mitglied
Beiträge: 15 Registriert: 20.02.2014
|
erstellt am: 03. Mrz. 2014 11:56 <-- editieren / zitieren --> Unities abgeben:
|
h4wk Mitglied
Beiträge: 15 Registriert: 20.02.2014
|
erstellt am: 03. Mrz. 2014 16:11 <-- editieren / zitieren --> Unities abgeben:
Hallo. ich bins nochmal Ich würde gerne die "id" jeder Messung erfassen. Mein Problem dabei ist nicht das auslesen (das wurde ja bereits gut erklärt) sondern der Umgang mit beliebig vielen Messungen. Im Moment lese ich die zwei Messungen so aus:
Code:
is tbl:table; zeile,spalte,anzahlMeldungen:Integer; do anzahlMeldungen:=2 --Dieser Wert müsste abgefragt werden zeile:=1; while zeile<(anzahlMeldungen + 1) loop XMLSchnittstelle1.öffneDokument; tbl := XMLschnittstelle1.holeknoten("/dataExport/measurements/measurement",1); tbl.schliesseDialog; --Ausgabe der "id" auf der Kommandozeile print "Messung Nr.: " , zeile , " id=" , tbl[4,zeile][2,1]; --hier liegt "id" zeile := zeile + 1; end; end;
Gibt es eine Möglichkeit um die Anzahl der Messungen ("measurement") auszulesen? Danke für die tolle Hilfe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 03. Mrz. 2014 16:41 <-- editieren / zitieren --> Unities abgeben: Nur für h4wk
normalerweise holen Sie sich alles, was Sie interessiert aus der XML-Datei (in einen Datenauszug). Und dann arbeiten Sie mit der Ergebnistabelle weiter. So können Sie z.B. alle Attribute der measurements-Elemente auslesen (nur eine Ebene nach unten). Das würde dann so aussehen, um alle id's auszulesen: Code:
is tbl:table; anzahl:integer; i:integer; do XMLSchnittstelle.öffneDokument; -- hole knoten gibt eine tabelle zurück tbl:=XMLSchnittstelle.holeKnoten("/dataExport/measurements",1); XMLSchnittstelle.schließen; --anzahl aus tabelle ermitteln anzahl:=tbl[5,1].yDim; --die ids stehen jeweils in der Zelle [2,1] in der Attribute-Tabelle (Spalte 4) for i:=1 to anzahl loop print tbl[5,1][4,i][2,1]; next; end;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
h4wk Mitglied
Beiträge: 15 Registriert: 20.02.2014
|
erstellt am: 04. Mrz. 2014 08:59 <-- editieren / zitieren --> Unities abgeben:
Danke das hat mir wirklich geholfen Nun hoffentlich die letzte Frage:
Anscheinend ist in "tbl[5,1]" die Anzahl an Unterelementen gespeichert. Ich finde einfach keine Dokumentation, wo ich solche Informationen nachlesen kann. Gibt es da vielleicht was? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bon Simul Mitglied Simulant
Beiträge: 1250 Registriert: 08.08.2011 Plant Simulation 10.1, 11 ff Professional
|
erstellt am: 04. Mrz. 2014 09:16 <-- editieren / zitieren --> Unities abgeben: Nur für h4wk
am Besten ist, wenn Sie in der Zeile nach dem holeKnoten-Befehl einen Haltepunkt in der Methode setzen. Wenn Sie die Methode ausführen und der Debugger öffnet sich an dem Haltepunkt, klicken Sie dann mit der rechten Maustaste auf die Tabellenvariable. Sie können dann über das Kontextmenü sich die Tabelle in einem Editor anzeigen lassen. Die XML-Schnittstelle benutzt einen Container zum Datenaustausch (die Struktur mit den Untertabellen). In der Hilfe ist der Container nicht dokumentiert, wenn Sie sich die Tabelle ansehen, bekommen Sie aber heraus, wo was steht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
h4wk Mitglied
Beiträge: 15 Registriert: 20.02.2014
|
erstellt am: 04. Mrz. 2014 09:44 <-- editieren / zitieren --> Unities abgeben:
|