phpDOM

Door Legolas , 19 jaar geleden, 2.555x bekeken

Geïnspireerd door wat Jelmer voor Community Coding had geschreven (twee klasses voor de DOM), heb ik deze set klassen geschreven. Deze set is wat algemener en is dus in staat om naast valide XHTML ook gewoon XML te creëeren.

Overigens heeft Jelmer hier een mooie klasse voor de DOM ((X)HTML/PHP 5). (Overigens is dat Community Coding) Ik heb die klassen niet echt goed bekeken, maar op het eerste oog zijn ze best mooi =).

Er zit nu ook rephpDOM bij, een klasse die phpDOM objecten genereert aan de hand van XML.

URL: http://www.legolasweb.nl/content/view/68/29/

Voorbeeld #1:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
32
33
34
35
36
37
<?php

// Logisch ;)
require_once 'phpdom.php';

// Maak een pagina, het is XHTML, dus true
$page =& new phpDom(true);

// Voeg daar een head sectie aan toe
$head =& new Element('head');
$page->root->appendChild($head);

// Met een titel =)
$title =& new Element('title');
$head->appendChild($title);

// En natuurlijk moet de titel ook echt tekst bevatten
$text =& new TextNode('Test page');
$title->appendChild($text);

// Vervolgens voegen we een body element toe
$body =& new Element('body');
$page->root->appendChild($body);

// In de body sectie komt een div, met een id attribuut
$div =& new Element('div');
$body->appendChild($div);
$div->setAttribute('id', 'content');

// Dan stoppen we ook nog wat tekst in de div
$innerdiv =& new TextNode('Test =)');
$div->appendChild($innerdiv);

// Tenslotte tonen we de pagina (true laat hem returnen)
$page->display(false);

?>


Voorbeeld #2:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
32
33
34
35
36
37
38
<?php

// Weer logisch... =P
require_once 'phpdom.php';

// XML Content-Type header
header('Content-Type: text/xml');

// Nu maken we een gewone pagina
$page =& new phpDom(false);

// Dat betekent ook dat hij nog geen basis-element heeft, dus die maken we nu
$root =& new Element('root');
$page->setRoot($root);

// Laten we er even wat items in stoppen
for ($i = 0; $i < 5; $i++) {
    // Om te beginnen maken we het item
    $item =& new Element('item');
    $root->appendChild($item);

    // Vervolgens een titel met wat zinloze tekst
    $title =& new Element('title');
    $item->appendChild($title);
    $text =& new TextNode('Item #' . ($i + 1));
    $title->appendChild($text);

    // Hetzelfde voor een beschrijving
    $description =& new Element('description');
    $item->appendChild($description);
    $text =& new TextNode('This is item #' . ($i + 1));
    $description->appendChild($text);
}


// En weer de pagina echo'en
$page->display(false);

?>


Voorbeeld #3:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

// Wat zal ik eens zeggen =P
require_once 'phpdom.php';
require_once 'rephpdom.php';

// XML Content-Type header
header('Content-Type: text/xml');

// Nu gaan we terug bouwen vanaf XML dus hebben we een rephpDOM object nodig
$re =& new rephpDOM();

// Even wat XML laden (hier uit een bestand, maar setXML('<xml></xml>') kan ook)
$re->setXMLFromFile('example3.xml');

// En doe je ding =)
$re->parse();

// Vervolgens kunnen we het phpDOM object ophalen
$page =& $re->page;

// En alsnog weergeven =P
$page->display(false);

?>

Gesponsorde koppelingen

PHP script bestanden

  1. phpdom

 

Er zijn 7 reacties op 'Phpdom'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Mitch X
Mitch X
19 jaar geleden
 
0 +1 -0 -1
Ziet er netjes uit :)


19 jaar geleden
 
0 +1 -0 -1
PHP 4+, mooi :-)
Jelmer -
Jelmer -
19 jaar geleden
 
0 +1 -0 -1
Je hebt hem flink gedocumenteerd en aardig wat verbeterd: controle op wat er geappend wordt, automatisch bepalend of het een enkele tag of dubbele is, betere namen, references die wel werken in PHP4 (mijnen werken alleen in 5)

Enkel probleempje met bijvoorbeeld een textarea-element. Daar laat je geen appendChild op los, dus is het niet een array, dus wordt hij geprint als <textarea/>. Maar daar luisteren veel browsers niet naar. Dus dan moet je bij dat soort elementen een lege TextNode toevoegen.

Maar natuurlijk wel altijd prettig waneer je geen DOMdocument() kan gebruiken op je host.

Ik mis alleen parentNode (die ik nu zelf wel in een van mijn nieuwere versies die ik gebruik heb toegevoegd, gewoon tijdens appendChild() bij het element dat je append de parentNode-var laten verwijzen naar $this.) en het mooiste, het kunnen laden van documenten. Nu kan je ze alleen maar maken, maar inladen zou ook mooi zijn ;)

edit: heb mijn versie even geüpdate, maar helaas is hij alleen geschikt voor diegenen die het aandurven php5 uit te geven. En ja, dat is een oude bewerkte versie van CC die gelinkt is aan die die in mijn weblog zit.
Legolas
Legolas
19 jaar geleden
 
0 +1 -0 -1
@Jelmer: als je application/xhtml+xml meegeeft worden alle lege elementen self-closed, dat was su mijn rede, maar lege textnode's kunnen natuurlijk ook =)

parentNode wordt moeilijk denk ik =P

Overigens, wat bedoel je met inladen?

edit: btw, ik zou die globals van je vervangen met defines =)

edit2: parentNode kan natuurlijk wel =)
Jelmer -
Jelmer -
19 jaar geleden
 
0 +1 -0 -1
Helaas kan je niet CONSTANT[$i] doen, dat lever een syntaxerror op, dus dat gaat niet werken ben ik bang :(

Met inladen bedoel ik een bestaand html-document (in jouw geval xml-document) kunnen inlezen naar een dom-tree waar je dan weer in kan navigeren en uit kan lezen (en aan kan passen en opnieuw uitpoepen)
Legolas
Legolas
19 jaar geleden
 
0 +1 -0 -1
Je hebt gelijk, dan moet je gaan werken met serialize of doorgeven aan de klasse (private $var = CONSTANT;).

Ik weet niet of ik snel iets kan maken wat de pagina kan terugladen naar objecten, maar proberen kan altijd =)

EDIT: parentnode toegevoegd
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Legolas
Legolas
19 jaar geleden
 
0 +1 -0 -1
Owkee, even een herbouw klasse toegevoegd =)

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. phpdom

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.