![]() |
Re: himXML (gesprochen himix ML)
Die besten Fehler sind doch sowieso:
--------------------------- Project1 --------------------------- Es ist ein Fehler aufgetreten --------------------------- OK Abbrechen --------------------------- :lol: |
Re: himXML (gesprochen himix ML)
Zitat:
außerdem sollten alle meine selbstausgelösten Exceptions mindestens den Namen der Funktion enthalten, worin diese erzeugt wurde. [edit] und selbst in den Delphi-Sourcen konnte ich soeine Meldung nicht finden ... könnte also vermutlich eine Windows-Meldung sein :gruebel: |
Re: himXML (gesprochen himix ML)
Das war nicht auf himiXML bezogen, sondern allgemein auf Programme, wo man sowas ab und zu mal zu gesicht bekommt ;)
(Sorry, falls das nicht direkt klar rübergekommen ist :oops: ) |
Re: himXML (gesprochen himix ML)
Hmm wollte jetzt mal ein wenig mit himXML arbeiten, doch bekomme ich beim Versuch einen XML-String zu setzen nur ein
Zitat:
Könntest du mir sagen, wie es richtig heißen muss? Momentan verwende ich (aufs Problem angepasst):
Delphi-Quellcode:
Wie gesagt, ich denke, es wird an der (impliziten) Umwandlung String -> AnsiString liegen, habe auch schon bissl probiert, aber mangels Wissen war ich nicht wirklich erfolgreich.
var
XML: TXMLFile; begin XML := TXMLFile.Create; try //XML.asXML := FContent; XML.asXML := '<root>â</root>'; // <-- Hier macht es Bumm finally XML.Free; end; end; Würde mich freuen, wenn du mir helfen kannst :) MfG Zwoetzen PS: Habe auch nen Tippfehler in einer Fehlermeldung entdeckt: Zitat:
|
Re: himXML (gesprochen himix ML)
Ist ja auch kein vollständiges XML, sowas würde gehen:
Delphi-Quellcode:
oder
XML.asXML := '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><root>â</root>';
Delphi-Quellcode:
€: hast soweit recht, dass das Zeichen â scheinbar (bei asXML) für Verwirrung sorgt. Konnte jetzt auch nicht ermitteln, unter welcher Zeichencodierung das auch so in der Datei steht und damit eine gültige XML-Struktur wäre.
XML := TXMLfile.Create(self, 'root');
XML.RootNode.Text := 'â'; Das funktioniert auch nicht, sollte es aber, da das eine gültiges XML ist
Delphi-Quellcode:
Sieht so aus, als ob asXML an der UTF-8 Kodierung festhält
XML.asXML := '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?><root>â</root>';
|
Re: himXML (gesprochen himix ML)
Danke für deine Antwort :)
Die erste Variante ändert nix: Selbst mit ordentlichem XML-Header kommt der Encoding-Fehler. Der zweite Vorschlag bringt etwas Besserung, allerdings erhalte ich später dann die Meldung Zitat:
Ich denke es hängt damit zusammen, das himXML bei der Zuweisung an .TExt davon ausgeht, dass es wirklich nur Text ist, und somit diesen nicht weiter parst. Ich habe auch probiert, statts .Text das .XMLText zum zuweisen zu verwenden, doch dann bekomme ich den Fehler Zitat:
Als Information: Die Quelldaten habe ich mit zuvor als XHTML-Datei aus dem Internet geladen, und bereits das genauer zu analysierende <div> extrahiert. Das heißt ich habe ein <div> als Wurzelknoten im String, was dann natürlich alles mögliche noch enthält. Der extrahierte Code ist dabei gültiges XHTML, sollte also keine Probleme geben. Das Dokument liegt dabei als UTF-8 vor, und ich lade es mittels IdHTTP.Get in einen String. Nach ein paar String-Operationen (Extrahieren des gewünschten divs) will ich diesen nun als XML interpretieren lassen um ihn weiter analysieren zu können (wird sonst mot Pos/PosEx etwas mühselig ^^). (Btw: Habe ich schon erwähnt, dass ich Delphi2009 unter Windows7 verwende? Keine Ahnung, ob das irgendwie Auswirkungen hat, Delphi2009 wird laut erstem Post auf jeden Fall unterstützt, Windows7 laut Seite 5 des Threads oder so auch.) |
Re: himXML (gesprochen himix ML)
Unter Delphi2009 wird es hauptsächlich entwickelt und dann abund zu mal in TDE und D7 getestet
und Windows (auch Windows 7) hat eigentlich nur einen Einfluß auf die caseinsensitiven Namensvergleiche und wa wurd ja vor Kurzem alles an Win7 angepaßt und nun auch eine Notfallalternative implementiert, also da sollte es zumindestens keine Probleme mehr geben ... es hängt also nur noch von der Delphiversion ab. <root>â</root> ist insofern eine ungültige Codierung, da XML ohne Angabe einer Codierung standardmäßig UTF-8 ist. Node.Text nimmt nur "Text" entgegen, welcher in dem Node gespeichert wird, ansonsten gibt es noch Node.XMLText, welches eine XML-Struktur entgegennehmen würde (ähnlich zu Document.asXML). Document.asXML wird nur an LoadFromXML/SaveToXML weitergeleitet und sollte eigentlich auch andere Codierungen verstehen können. :gruebel: Wegen dem Rest muß ich dann mal in Ruhe schauen (hab hier grad kein Delphi und auch etwas wenig Zeit) |
Re: himXML (gesprochen himix ML)
Danke für deine Antwort.
Nehm dir ruhig die Zeit, die du brauchst, vorrübergehend arbeite ich mit einer "korrigierten" Version der XHTML-Datei, wo ich die ganzen Sonderzeichen korrigiert habe, sodass die Datei problemlos eingelesen kann und ich die Auswertung schonmal programmieren kann ;) Allerdings bin ich da schon auf einen nächsten Fehler gestoßen: Test-Prozedur:
Delphi-Quellcode:
Normalerweise würde man davon ausgehen, dass man nun als Ausgabe genau den Teil zwischen den <root>-Tags bekommt, allerdings erscheint:
procedure TForm1.Button2Click(Sender: TObject);
const S: String = '<root>Some Text<child>Ding</child>Something else</root>'; // <-- Sollte gültiges XML sein var XML: TXMLFile; begin XML := TXMLFile.Create; try XML.asXML := S; ShowMessage(XML.RootNode.XMLText); finally XML.Free; end; end; Zitat:
|
Re: himXML (gesprochen himix ML)
Also das asXML bzw. XMLText nimmt wirklich keine anderen Kodierungen an, da hab ich wohl etwas "falsch" bedacht, wird mit dem nächsten Update geändert.
(nur das dauert noch etwas, da sich grad einiges ändert und noch nicht alles fertig ist) Du könntest aber deinen Text in einen Stream und das XML dann von dort laden. in etwa so:
Delphi-Quellcode:
var MS: TMemoryStream;
Text: AnsiString; MS := TMemoryStream.Create; MS.WriteBuffer(Text[1], Length(Text)); MS.Position := 0; XML.LoadFromStream(MS); MS.Free; Zitat:
Ein Knoten enthält entweder Unterknoten oder Text, aber ich eigentlich sollte sowas schon möglich sein, da über die Option xoAllowUnknownText (standardmäig gesetzt), bei derartigem Text-Knoten-Mischmasch der Text jeweils in Unterknoten vom Typ xtUnknown ausgelagert werden sollte, allerding klappt das nicht unter allen Umständen. Mein letzter Versuch verlief da nicht so gut > ![]() wobei HTML selber ja kaum noch ein valides XML darstellt. |
Re: himXML (gesprochen himix ML)
Das mit der Kodierung muss ich ein andern mal in Ruhe anschauen, auf Anhieb hatte es grad nicht geklappt.
Aber zu dem "Fehler": Sollte XHTML nicht eigentlich valides XML sein? (Dass HTML keins ist, ist klar, dachte bisher, dass XHTML eigentlich gültiges XML sein sollte.) Und mal von dem valide abgesehen: Sollte nicht das, was "reingetan" wird, bei .XMLText auch 1:1 wieder rauskommen? Denn ich würde es so verstehen, dass .XMLText den Inhalt eben 1:1 wiedergibt. (Ok, wenn der Testcode nicht erlaubt ist, ist die Korrektheit natürlich nichtmehr garantiert.) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz