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® 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>
Code: Alles auswählen
readreadHtmlToc("toc.hhc");
function readHtmlToc($filename)
{
$doc = new DOMDocument;
@$doc->loadHTMLFile($filename);
$tags = $doc->getElementsByTagName('ul');
foreach ($tags as $tag) {
echo $tag->nodeValue."\n";
}
//echo $doc->saveHTML();
}
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...