[PHP][XML] Parsen XML in PHP 4.0.7?

Pagina: 1
Acties:
  • 126 views sinds 30-01-2008
  • Reageer

  • Ariejan
  • Registratie: Februari 2001
  • Laatst online: 02-09 16:31
Ik gebruik Debian unstable/testing met Apache 1.3.20 en PHP 4.0.7rc3.

Wat ik wil doen, is het parsen van 'n XML file:
code:
1
2
3
4
5
<?xml version="1.0"?>
<employee>
    <name>Matt</name>
    <pos type="contract">Web Guy</pos>
</employee>

en daarvan wil ik alle node-namen laten zien. (name, pos) Dit probeer ik met het volgende PHP programmaatje:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
    // Laden van temp.xml 
    $doc = xmldocfile( "temp.xml" ) or die("Oops, xml file not loaded!");

    // geef de root aan
    $root = $doc->root();

    // $nodes is 'n array  met alle childnodes van root
    $nodes = $root->children();

    //doorloop 't hele array
    while($node = array_shift($nodes))
    {
        // print de name van elke node.
        $name = $node->name;
        print("$name<br>");
    }
?>

Het grote probleem is: ik krijg 'n mooie pagina met alleen maar <br>-en. alle node-names zijn dus '' (leeg!)

Waar ligt dit aan?? Zit er een fout in mijn xml file, in de code?

PS. Ik heb dit programma ook los gelaten op http://slashdot.org/slashdot.xml maar ook daar, geen node-names.

Alle hulp wordt gewaardeerd!!! :)

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
moet je niet domxml_root gebruiken ipv $doc->root() ?

[edit]
oh, ik geloof dat het $doc->root moet zijn ipv root(). bij children netzo.

  • Ariejan
  • Registratie: Februari 2001
  • Laatst online: 02-09 16:31
Beide zijn mogelijk. $doc is 'n object. en als je dan $doc->root(); aanroept, maak je alleen gebruik van de objectstructuur. De andere functies zijn voor niet oop-hackers wat makelijker in de omgang. (Zo heb ik gelezen in PHP4 - Het complete handboek)

  • Ariejan
  • Registratie: Februari 2001
  • Laatst online: 02-09 16:31
Gevonden!

Na 'n print_r($root) krijg ik dit:
code:
1
DomElement Object ( [type] => 1 [tagname] => employee [0] => 2 [1] => 136616736 )

Hieruit maak ik op dat $node->name niet werkt, maar $node->tagname wel zou kunnen werken.

Dit heb ik geprobeert, en het werkt!!

Resultaat:
code:
1
2
3
name

pos