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