Delphi-PRAXiS
Seite 11 von 35   « Erste     91011 121321     Letzte » 

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   himXML (gesprochen himix ML) (https://www.delphipraxis.net/130751-himxml-gesprochen-himix-ml.html)

Zwoetzen 30. Jun 2009 12:48

Re: himXML (gesprochen himix ML)
 
Die besten Fehler sind doch sowieso:

---------------------------
Project1
---------------------------
Es ist ein Fehler aufgetreten
---------------------------
OK Abbrechen
---------------------------

:lol:

himitsu 30. Jun 2009 13:36

Re: himXML (gesprochen himix ML)
 
Zitat:

Zitat von Zwoetzen
---------------------------
Project1
---------------------------
Es ist ein Fehler aufgetreten
---------------------------
OK Abbrechen
---------------------------

also das ist definitiv keine meiner Exceptions ... kann mich jedenfalls nicht erinnern irgendwo sowas noch verbaut zu haben. :shock:

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:

Zwoetzen 30. Jun 2009 14:44

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: )

Zwoetzen 6. Jul 2009 20:25

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:

Zitat von himXML
EXMLException (TXMLFile.ReadData):
invalid file encoding.

Ich vermute, dass es da einfach Probleme mit den verschiedenen String-Typen gibt, nur kenn ich mich da nicht sonderlich gut aus ^^
Könntest du mir sagen, wie es richtig heißen muss? Momentan verwende ich (aufs Problem angepasst):
Delphi-Quellcode:
var
  XML: TXMLFile;
begin
  XML := TXMLFile.Create;
  try
    //XML.asXML := FContent;
    XML.asXML := '<root>â</root>'; // <-- Hier macht es Bumm
  finally
    XML.Free;
  end;
end;
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.

Würde mich freuen, wenn du mir helfen kannst :)

MfG Zwoetzen


PS: Habe auch nen Tippfehler in einer Fehlermeldung entdeckt:
Zitat:

Zitat von himXML
EXMLException (TXMLNodeList.Add):
text node can't constain subnodes.

Ich denke das s in "constain" ist zu viel (wollte dich nur mal drauf hinweisen auch wenn die Fehler wohl nochmal geändert werden :mrgreen: )

Satty67 6. Jul 2009 21:19

Re: himXML (gesprochen himix ML)
 
Ist ja auch kein vollständiges XML, sowas würde gehen:
Delphi-Quellcode:
XML.asXML := '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><root>â</root>';
oder
Delphi-Quellcode:
XML := TXMLfile.Create(self, 'root');
XML.RootNode.Text := 'â';
€: 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.

Das funktioniert auch nicht, sollte es aber, da das eine gültiges XML ist
Delphi-Quellcode:
XML.asXML := '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?><root>â</root>';
Sieht so aus, als ob asXML an der UTF-8 Kodierung festhält

Zwoetzen 6. Jul 2009 22:27

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:

Zitat von himXML
EXMLException (TXMLNodeList.Add):
text node can't constain subnodes.

wenn ich versuche, auf einen Knoten zuzugreifen.
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:

Zitat von himXML
EXMLException (TXMLFile.ParsingTree):
unexcepting end of data - not all opened tags are closed

error at byte position 11.498 ("#000D#000A " on line 75)

wobei der zugewiesene String wohlgeformtes XML ist.



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.)

himitsu 7. Jul 2009 09:48

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)

Zwoetzen 7. Jul 2009 15:43

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:
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;
Normalerweise würde man davon ausgehen, dass man nun als Ausgabe genau den Teil zwischen den <root>-Tags bekommt, allerdings erscheint:

Zitat:

Zitat von ShowMessage
Some Tex
<child>Ding</child>
Something els

Das bedeutet, dass sowohl das letzte Zeichen vor dem öffnenden <child> als auch vor dem schließenden </root> fehlt. Habe es mit verschiedenen Werten probiert, es scheint immer genau ein Zeichen zu fehlen.

himitsu 7. Jul 2009 17:29

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:

<root>Some Text<child>Ding</child>Something else</root>
Ist kein valides XML ... dieses ist nur eine "Untat", welche aus HTML bekannt ist.
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 > http://www.delphipraxis.net/internal...042683#1042683 ,
wobei HTML selber ja kaum noch ein valides XML darstellt.

Zwoetzen 7. Jul 2009 19:47

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 16:47 Uhr.
Seite 11 von 35   « Erste     91011 121321     Letzte » 

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf