AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML-Dateien per ReadLn einlesen

XML-Dateien per ReadLn einlesen

Ein Thema von devidespe · begonnen am 11. Aug 2010 · letzter Beitrag vom 11. Aug 2010
Antwort Antwort
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
423 Beiträge
 
Delphi 10.4 Sydney
 
#1

XML-Dateien per ReadLn einlesen

  Alt 11. Aug 2010, 11:21
Hallo,

ich möchte die XML-Dateien der Windows-Leistungsbewertung in Delphi auswerten und benutze dazu AssignFile, Reset, und ReadLn.

Leider liefert ReadLn folgendes zurück:

ÿþ<'#0'?'#0'x'#0'm'#0'l'#0' '#0'v'#0'e'#0'r'#0's'#0'i'#0'o'#0'n'#0'='#0'"'#0'1 '#0'.'#0'0'#0'"'#0

und das sollte eigentlich zurückkommen:

<?xml version="1.0">

Aus irgendeinem Grund wird nach jedem Zeichen '#0' eingefügt. Hat dafür jemand eine Erklährung? Wie kann ich das ändern?

Danke und Gruß
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#2

AW: XML-Dateien per ReadLn einlesen

  Alt 11. Aug 2010, 11:23
Die Datei ist UTF16 kodiert, und du packst das in einen Ansistring. Deshalb die beiden komischen Zeichen am Anfang (siehe Byte Order Mark).

Pack das Ganze in einen WideString, dann müsste es eigentlich gehen.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.900 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: XML-Dateien per ReadLn einlesen

  Alt 11. Aug 2010, 11:25
XML-Dateien sollten über entsprechender XML-Komponenten/Parser geladen werden. Oder willst du die ganzen Regeln bzgl. Entities/Codierung selbst nachimplementieren?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
423 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: XML-Dateien per ReadLn einlesen

  Alt 11. Aug 2010, 11:37
Die Datei ist UTF16 kodiert, und du packst das in einen Ansistring. Deshalb die beiden komischen Zeichen am Anfang (siehe Byte Order Mark).

Pack das Ganze in einen WideString, dann müsste es eigentlich gehen.

MfG
Fabian
Wenn ich anstatt String den WideString nehme, ändert das leider nichts am Ergebnis. Vielleicht liegts an ReadLn?

Ich wollte eigentlich keine kompletten XML-Strukturen verarbeiten, sondern lediglich 2 Werte auslesen. Dafür einen eigenen XML-Parser zu verwenden, schien mir zu aufwendig.
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.900 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: XML-Dateien per ReadLn einlesen

  Alt 11. Aug 2010, 11:41
Wenn ich anstatt String den WideString nehme, ändert das leider nichts am Ergebnis. Vielleicht liegts an ReadLn?
ReadLn dürfte das AFAIK nur ab D2009 können.

Ich wollte eigentlich keine kompletten XML-Strukturen verarbeiten, sondern lediglich 2 Werte auslesen. Dafür einen eigenen XML-Parser zu verwenden, schien mir zu aufwendig.
Und? Wie willst du diese erkennen? Ich kann dir problemlos deine XML so verändern das deine Erkennung fehl schlägt (z.B. deine gesuchten Tags geschickt in XML-Kommentare einpacken oder dies als Teil eines CData-Segmentes auftauchen lassen.

Nimm dir etwas Zeit und mach die Lösung vernünftig! Du sparst dir damit sehr viel Aufwand bezüglich Fehlersuche und Stress.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
423 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: XML-Dateien per ReadLn einlesen

  Alt 11. Aug 2010, 11:44
Welchen XML-Parser würdest Du denn vorschlagen? Es geht wirklich nur ums Suchen und Auslesen von XML-Attributen, nicht um Änderungen. Also irgend etwas einfaches...
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.224 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: XML-Dateien per ReadLn einlesen

  Alt 11. Aug 2010, 11:56
Wenn Du eine IDE-Komponente nutzen willst, geht wohl am einfachsten:

Result := (XmlDocument1.DOMDocument as IDOMNodeSelect).selectNode(XPath).childNodes[0].nodeValue

Dann kannst Du sogar XPath nutzen
Das setzt allerdings voraus, dass der Knoten existiert und keinen Leerstring enthält - sonst gibt es einen Fehler.

Daher bin ich hier gerade auf der Suche nach einer flexibleren Alternative.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (11. Aug 2010 um 12:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.603 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: XML-Dateien per ReadLn einlesen

  Alt 11. Aug 2010, 12:05
ReadLn dürfte das AFAIK nur ab D2009 können.
Die alten Pascal-Funktionen um AssingFile sind und blieben, auch mit Umstellung auf Delphi2009/Unicode, immernoch Ansi.

Selbst in Delphi 7 kennt ReadLn WideString-Variablen.
Aber die Datei wird immer als ANSI interpretiert.
Es sei den man stellt die entsprechende WinAPI auf OEM um, dann kennt sie stattdessen den alten OEM-Zeichensatz (DOS).

PS: meinem Hier im Forum suchenhimXML-Download sind noch einige andere XML-Libs mit beigelegt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (11. Aug 2010 um 12:09 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 04:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf