Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP: DOMDocument::loadHTMLFile problem

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
nerd
PostRank 10
PostRank 10
Beiträge: 4023
Registriert: 15.02.2005, 04:02

Beitrag von nerd » 18.11.2008, 06:54

hallo,

kennt sich jemand mit php dom (https://www.php.net/manual/en/book.dom.php) aus?
versuche hier ein .chm (windows helpfile) via php einzulesen und dann struktur in einer db speichern. das chm ist hier schon entpackt und besteht aus toc und den einzelnen seiten.
hier ist mein toc.hhc:

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1">
<!-- Sitemap 1.0 -->
</HEAD><BODY>
<OBJECT type="text/site properties">
	<param name="ImageType" value="Folder">
</OBJECT>
<UL>
	<LI> <OBJECT type="text/sitemap">
		<param name="Name" value="Welcome">
		<param name="Local" value="cover.htm">
		</OBJECT>
	<LI> <OBJECT type="text/sitemap">
		<param name="Name" value="Introduction">
		<param name="Local" value="cover.htm">
		<param name="ImageNumber" value="1">
		</OBJECT>
	<UL>
		<LI> <OBJECT type="text/sitemap">
			<param name="Name" value="Installation">
			<param name="Local" value="installation.htm">
			</OBJECT>
		<LI> <OBJECT type="text/sitemap">
			<param name="Name" value="What's new">
			<param name="Local" value="whatsnew.htm">
			</OBJECT>
	</UL>
</UL>
</BODY></HTML>
hier der code um den toc einzulesen (bzw. mein versuch auf die ul's zuzugreifen):

Code: Alles auswählen

readreadHtmlToc&#40;"toc.hhc"&#41;;

function readHtmlToc&#40;$filename&#41;
&#123;
    $doc = new DOMDocument;
    @$doc->loadHTMLFile&#40;$filename&#41;;
    $tags = $doc->getElementsByTagName&#40;'ul'&#41;;
    foreach &#40;$tags as $tag&#41; &#123;
           echo $tag->nodeValue."\n";
    &#125;        
    //echo $doc->saveHTML&#40;&#41;;
&#125;
bekomme hierbei nur fehlermeldungen "Warning: DOMDocument::loadHTMLFile() [function.DOMDocument-loadHTMLFile]: ID Name already defined in ../import/toc.hhc, line: 16 in C:\xampp\htdocs\qb_help\includes\class_import.php on line 56" (ID? in dem toc sind keine id's vergeben!)

wenn ich testweise den <object><param> salat mit links wie <a href="abc.html">abc</a> ersetze klappt es und ich kann die datei in DOM einlesen und durchlaufen.
ich habe versucht mit preg_replace was zu basteln was alle <objects> nach <a> mit den entsprechenden parametern zu ersetzt - habe allerdings wenig ahnung von regex. mein problem war der whitepace (linebraeck und unbekannt anzahl tabs nach <OBJECT type="text/sitemap">) sowie die optionale zeile <param name="ImageNumber" value="1">.
kann mir jemand erklaeren wie man das macht; oder gibts noch ne einfache/bessere loesunbg fuer das problem? am ende der funktion sollte ich die struktur irgendwie in einem verschachtelten array haben, sodas ich fuer jede node name, link und ID der parentnode habe...

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

maddoggy
PostRank 3
PostRank 3
Beiträge: 68
Registriert: 25.05.2007, 09:44

Beitrag von maddoggy » 18.11.2008, 13:11

Eine Lösung kann ich dir jetzt zwar nicht direkt anbieten aber ich vermute das es an der html version liegt.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> ist doch html 1.x wenn ich mich nicht täusche. Wenn ich mich irre dann verbessert mich.
HTML 1.x ist so alt das kennt noch nicht mal mehr nen validator. Da könnte ich mir gut vorstellen das die PHP Bilbliotheken das auch nicht mehr fressen, auch wenn sie keinen sauberen HTML Code wollen.

Vielleicht wäre des richtige Ansatz das file erstmal in brauchbares HTML zu wandeln.... keine Ahnung vielleicht gibt es da Tools für...zb. Frontpage müsste das ja können.
Vielleicht könntest du damit dann weiter arbeiten.

Ich hoffe ich konnte irgendwie weiterhelfen

Grüße

Alex

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag