[PHP]GetElementById HTML Output

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • demichiel
  • Registratie: December 2003
  • Laatst online: 16-08 15:22
Hallo,

Ik probeer al een paar uur het volgende te doen:

Er is een bronpagina met de volgende structuur:
HTML: nieuws.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
    <head>
        <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
        <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
        
        <title>Artikel 1</title>
    </head>
    <body>
        <div id="navigation">
            <ul>
                <li>Home</li>
                <li>Links</li>
                <li>About</li>
            </ul>
        </div>
        </div>
        <div id="content">
            <h1>Title</h1>
            <h2>Intro</h2>
            <p>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent adipiscing.
            </p>
            <a href="link.htm">Linkje</a>
            <h2>Mooie titel</h2>
            <p>
                Phasellus sollicitudin pellentesque turpis. Proin auctor vulputate leo.
            </p>
        </div>
    </body>
</html>


Nu zou ik die pagina graag wat lichter maken, om ze te bekijken op mijn Palm. Het grote menu enzo interesseert me dan niet echt. Ik zou enkel de content willen.

Ik heb in php het volgende bijeengeknutseld om hier voor te zorgen:
PHP: code.php
1
2
3
4
5
6
<?php
    $url = 'nieuws.htm';
    $doc = new DOMDocument();
    $doc->LoadHTMLFile($url);
    print $doc->getElementById( 'content' )->nodeValue;
?>


Wat ik op voorhand nog niet wist was dat een nodeValue enkel tekst output. Mijn output is dus:
code:
1
TitleIntroLorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent adipiscing.LinkjeMooie titePhasellus sollicitudin pellentesque turpis. Proin auctor vulputate leo.


Niet echt vriendelijk om te lezen dus.

Mijn doel was om de html code binnen de div over te houden, zoals:
HTML:
1
2
3
4
5
6
7
8
9
10
<h1>Title</h1>
<h2>Intro</h2>
<p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent adipiscing.
</p>
<a href="link.htm">Linkje</a>
<h2>Mooie titel</h2>
<p>
    Phasellus sollicitudin pellentesque turpis. Proin auctor vulputate leo.
</p>


Hierna ben ik wat op het internet gaan zoeken maar ik vond niet direct een oplossing Hier hebben ze ongeveer hetzelfde probleem EN een oplossing.
Nothing: nodeValue is the concatenation of the value portion of the tree, and will never have tags.

What I would do to make an HTML fragment of the tree under $node is this:
PHP:
1
2
3
4
5
$doc = new DOMDocument();
foreach($node->childNodes as $child) {
    $doc->appendChild($doc->importNode($child, true));
}
return $doc->saveHTML();
Maar ik ben nog niet zo ervaren op het gebied van php om te zien wat hier precies gaande is en ik kan het ook niet reproduceren.

Dus, zou er iemand de 'foreach' methode kunnen uitleggen, een andere methode kunnen toelichten, me laten weten dat het onmogelijk is, ... ?

Alvast bedankt

[ Voor 6% gewijzigd door demichiel op 12-03-2009 22:48 . Reden: Verduidelijking ]


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
De foreach-methode maakt een nieuw document aan, en gaat daar alle nodes onder je content-div aan toevoegen. Weet je zeker dat $node de juiste node is? Wat geeft saveHTML terug?

Wellicht moet je eerst een root element aanmaken, en daar de nodes aan toevoegen:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
$doc = new DOMDocument();

$root = $doc->createElement('root');
$doc->appendChild($root);

foreach($node->childNodes as $child) {
    $root->appendChild($doc->importNode($child, true));
}
return $doc->saveHTML();

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 18:08

CoolGamer

What is it? Dragons?

Er zit een functie om een Node om te zetten naar HTML, maar is niet uitgebreid gedocumenteerd.
PHP:
1
print $doc->getElementById( 'content' )->C14N();

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

  • demichiel
  • Registratie: December 2003
  • Laatst online: 16-08 15:22
TheCoolGamer schreef op donderdag 12 maart 2009 @ 23:37:
Er zit een functie om een Node om te zetten naar HTML, maar is niet uitgebreid gedocumenteerd.
PHP:
1
print $doc->getElementById( 'content' )->C14N();
En dit werkt perfect van de eerste keer, bedankt!

Ook bedankt JanDM, ik heb nog wat verder zitten proberen maar niet tot resultaat gekomen.