![]() |
Metadaten aus Webdokument filtern
Hallo,
weder Forum noch Google konnten mir bei dem Problem helfen: Ich erstelle aktuell einen Webeditor. Hierbei sollen die Metadaten herausgefiltert werden. Soweit kein Problem, mit einem einfachen, selbstprogrammierten Parser ist das schnell erledigt, wobei sich das Problem ergibt, dass die Notation nicht immer gleich ist:
Delphi-Quellcode:
Diese Daten sollen extrahiert und nach gesondert Bearbeitung wieder eingebunden werden können.
<meta name="x" content="x">
oder auch <meta content="x" name="x"> Wenn ich die Seite einlese, werden die Daten extrahiert und bis zum Schließen der Seite in eigenen Edits "aufbewahrt". Wenn nun in der Zwischenzeit direkt im Quelltext Änderungen vorgenommen wurden, stellt sich das Problem, dass der Originaltext, der ersetzt werden sollte, nicht mehr aufzufinden ist. Zwar ist es möglich, dazu ein Workaround zu schreiben, aber die Performance dürfte dabei ziemlich in den Keller gehen, da ja alle Variationen der Notation durchgegangen werden müßten. Meine Hoffnung war, dass ich einen Parser finde, der direkt auf die Meta-Objekte zugreifen kann, wobei ich bei DOM bisher nicht weitergekommen bin. Kennt jemand einen solchen Parser bzw. hat hierzu schon einmal eine Lösung gefunden/erstellt? Danke schonmal vorab Opa |
Re: Metadaten aus Webdokument filtern
Hallo,
bin mir nicht sicher, ob ich die Frage richtig verstanden habe: Würde so vorgehen: Alle META-Tags aus der überarbeiteten Quelle rausschmeißen und die aus den Edits im Quelltext direkt hinter <head> einfügen. Die Reihenfolge ist (meines Wissens) beliebig, wenn aus
Code:
<meta name="x" content="x">
Code:
wird, ist das eigentlich wurscht.
<meta content="x" name="x">
|
Re: Metadaten aus Webdokument filtern
Ich kann dir jetzt keinen konkreten Code liefern, weil ich mich dazu mit ihnen nicht gut genug auskenne, aber wenn du statt (oder zusätzlich zu) deinem Parser Regular Expressions verwendest, solltest du das eigentlich so hinbekommen, dass die Reihenfolge irrelevant ist :gruebel:
|
Re: Metadaten aus Webdokument filtern
Hallo,
Danke schon mal für die ersten Gedanken. Das Problem ist nicht, dass die Metadaten in irgendeiner besonderen Reihenfolge stehen müssen, sondern dass ich eine performante Lösung suche, die z. B. über etwas wie das DOM auf die einzelnen Metaobjekte zugreift. Zum Beispiel, dass ich, wenn ich die Keywords auslesen will, einfach auf das Objekt "Keywords" zugreifen kann, und dass ich, wenn ich darin etwas geändert habe, in eben dieses Objekt schreiben kann. Ich habe mir einen Parser geschrieben, der alle Tags, die mit "<meta" anfangen, ausliest, diese dann nach "name" auswertet und in verschiedene Edits verteilt. Nach der Bearbeitung werden alle Tags, die mit "<meta" anfangen, gelöscht, um sie mit den bearbeiteten zu ersetzen. Das ist nicht unbedingt der effektivsten Varianten eine, und ich würde sie gerne durch eine schnellere ersetzen. Hat jemand eine Idee? Danke und Gruß Opa |
Re: Metadaten aus Webdokument filtern
Hallo,
hier hat sich schon jemand mit dem Thema befasst, vielleicht hilft Dir das weiter: ![]() |
Re: Metadaten aus Webdokument filtern
Hallo,
ja, genau so etwas in der Richtung habe ich gesucht (zumindest, wenn man der Demo nachgehen kann). Leider kriege ich aber den Source nicht ans Laufen. Im Source wird zuerst einmal nach einer Unit verlangt, die ich dann auch noch auf der Webseite des Erstellers gefunden habe. Trotzdem steigt Delphi mir mit der Fehlermeldung, dass er "jphash.dcu" nicht schreiben könne, aus. Falls da noch jemand eine Idee hat, bin ich für Tipps dankbar... Danke und Gruß Opa |
Re: Metadaten aus Webdokument filtern
Die Unit befindet sich
![]() Dann in Delphi auf Projekt --> Optionen und Verzeichnisse Bedingungen. Dort die Punkte Ausgabeverzeichnis, Ausgabe für Units ändern. Suchpfad hinzufügen und es sollte funktionieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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-2025 by Thomas Breitkreuz