Seite 2 von 3

Re: XML auslesen, mainNode.... kann man den ändern?

Verfasst: 13.02.2013 13:57
von Thorsten1867
Helmut hat geschrieben:Muß die erste Zeile beachtet werden: <?xml version="1.0" encoding="ISO-8859-1"?> ??
Stört Die?
Die erste Zeile ist der RootNode und muss vorhanden sein.

Die XML-Datei ist in der Tat ungültig: -<SensorList> => <SensorList>

Re: XML auslesen, mainNode.... kann man den ändern?

Verfasst: 13.02.2013 14:00
von helpy
Man kann Daten viel besser strukturieren, verschachteln, einzelnen Knoten auch Eigenschaften zuweisen usw. ...

Ab wenn XML wirklich sinnvoll ist, darüber lässt sich streiten!
Wenn es sich nur um ein paar wenige Daten mit festen Datentypen handelt, dann spricht nichts gegen eine INI- oder PREFS-Datei.

Siehe auch:
==> Vorteile von XML
==> Vor- und Nachteile von XML

Re: XML auslesen, mainNode.... kann man den ändern?

Verfasst: 13.02.2013 14:05
von Helmut
In meinem Falle stellt sich die Frage nicht:
Das Gerät liefert die Daten so und wenn das XML-Format passen würde, dann habe ich die Daten in Purebasic und kann mich freuen ;-)

Gruß Helmut

Re: XML auslesen, mainNode.... kann man den ändern?

Verfasst: 13.02.2013 14:11
von Kiffi
Thorsten1867 hat geschrieben:Die XML-Datei ist in der Tat ungültig: -<SensorList> => <SensorList>
das kommt davon wenn man die XML-Struktur direkt aus dem IE kopiert. Dieser
ist auf Windows-Rechner als Standard-Viewer für XML-Dateien eingestellt und
legt bei der Anzeige ein CSS-Template darüber, so dass das XML besser lesbar ist.

Hierbei werden leider dann auch die Minus-Zeichen (als faltbare Knotenkennung)
eingefügt.

Bild

@Helmut: Wenn Du XML hier postest, dann nicht aus dem IE kopieren, sondern
in einen normalen Text-Editor laden und von dort aus kopieren.

Grüße ... Kiffi

Re: XML auslesen, mainNode.... kann man den ändern?

Verfasst: 13.02.2013 14:17
von Helmut
Kann man die erste Zeile ignorieren lassen ?? ;-)

So besser?

Code: Alles auswählen

<?xml version="1.0" encoding="ISO-8859-1"?>
<SensorList>
<Sensor>
	<ID>Nr 1</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02612</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 2</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02606</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 3</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02593</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 4</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02593</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 5</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02550</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 6</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02543</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 7</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02525</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 8</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02525</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 9</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02512</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 10</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02493</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 11</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02468</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 12</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02475</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 13</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02456</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr14</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>02437</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 15</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>00000</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 16</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>00000</Value>
	<Display>021</Display>
</Sensor>

</SensorList>

Re: XML auslesen, mainNode.... kann man den ändern?

Verfasst: 13.02.2013 14:32
von Kurzer
Helmut hat geschrieben:In meinem Falle stellt sich die Frage nicht
Das war auch nicht auf Deinen Fall bezogen, Helmut - eher ne generelle Frage. ;) Aber ich wollte auch gar nicht groß Deinen Thread kidnappen. Die Antwort von helpy ist schon prima, vielen Dank.

Bin schon wieder weg *whoosh* <)

Re: XML auslesen, mainNode.... kann man den ändern?

Verfasst: 13.02.2013 14:46
von PMV
@Helmut
Der XML-Parser sollte alles notwendige für dich erledigen, über
die XML-Deklaration musst du dir keine gedanken machen. Welche
Formate der in PB integrierte Parser allerdings tatsächlich verarbeiten
kann, weis ich nicht.

Zum auslesen brauchst du lediglich das Root-Element und damit
kannst du dann auf alle darunter liegenden Elemente zugreifen.
Oder du kennst die genauen "Pfade" der einzelnen Elemente,
dann kannst du wie Kiffe es dir vorgemacht hat auch direkt
auf diese einzeln zugreifen.


Kurzer hat geschrieben:Was ist eigentlich der Vorteil an XML Dateien?
In erster Linie Geschmack. Es ist vorallem eine für Menschen
lesbare Form von Daten und eigent sich daher sehr gut für
Daten, die direkt von Menschen geschrieben werden sollen.
Auf den zweiten Blick ist es aber auch die allgemeine
Verbreitung, so gibt es bereits sehr viele Parser und auch
Editioren, die XML unterstützen und dann ist da die Sache
mit der Validierung. Man kann definieren, wie eine XML aufgebaut
sein soll und so können entsprechende Editoren bereits bei
der Eingabe die gültigkeit prüfen. Auch können viele Parser
so bereits vor der tatsächlichen Verarbeitung der Daten prüfen,
ob auch die enthaltenden Daten logisch richtig sind.


MFG PMV

Re: XML auslesen, mainNode.... kann man den ändern?

Verfasst: 13.02.2013 15:15
von Helmut
Neue Erkennnisse:
Die Syntaxfehlermeldung kommt daher, dass das XML-File nicht richtig geladen und gespeichert wird.

Ich habe mir die Daten auf's Laufwerk C speichern lassen und das XML-File ist nicht komplett:
Mit

Code: Alles auswählen

InitNetwork()
ReceiveHTTPFile("http://192.168.0.140/sensorList.xml", "c:\TestHelmut.xml") 
Was mache ich da nu' wieder falsch.... ;-)

Code: Alles auswählen

lay>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 15</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>00000</Value>
	<Display>021</Display>
</Sensor>
<Sensor>
	<ID>Nr 16</ID>
	<Type>005</Type>
	<Min>02000</Min>
	<Max>03000</Max>
	<Value>00000</Value>
	<Display>021</Display>
</Sensor>

</SensorList>
Gruß Helmut

Re: XML auslesen, mainNode.... kann man den ändern?

Verfasst: 13.02.2013 15:37
von helpy
Helmut hat geschrieben:Neue Erkennnisse:
Die Syntaxfehlermeldung kommt daher, dass das XML-File nicht richtig geladen und gespeichert wird.
Soetwas hatte ich schon vermutet, deshalb mein Hinweis sich die XML-Datei selbst anzusehen.

Probiers mal mit folgendem:
==> ReceiveHTTPMemory einfach und Crossplattform
==> oder Http URLDownloadToFile Windows

lg,
guido

Re: XML auslesen, mainNode.... kann man den ändern?

Verfasst: 13.02.2013 15:50
von ts-soft
Helmut hat geschrieben:Ich habe mir die Daten auf's Laufwerk C speichern lassen und das XML-File ist nicht komplett:
Ich weiß jetzt nicht welche Windows Version Du mit welchen Rechten nutzt, aber
als User hat man kein Recht in das Wurzelverzeichnis des Systemlaufwerks zu schreiben!
Solltest Du Windows Vista oder höher nutzen und hast keinen User-Modus für Windows Vista in den
Compilereinstellungen, wird Dein Programm virtualisiert und schreibt ganz woanders hin (VirtualStore).
Speicher besser in Dokumente oder auf einem anderem Laufwerk und fordere immer den User-Modus
in den Compilereinstellungen an, ansonsten erfährst Du nie, wenn was mit dem Schreiben von
Dateien oder Werten in die Registry nicht geklappt hat.

Der Tipp von helpy, gleich in den Speicher laden, ist natürlich unproblematisch.