[PHP] Array uit XML parsen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de volgende XML:
XML:
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
<webdesign>
  <web id="9">
    <title>León Music</title>
    <description>Technieken gebruikt: Flash, Flash/XML MP3 player, PHP, HTML/CSS</description>
    <url>http://www.leonmusic.com</url>
    <thumbnails>
      <image>files/portfolio/web/leonmusic/logo.jpg</image>
      <image>files/portfolio/web/leonmusic/001.jpg</image>
      <image>files/portfolio/web/leonmusic/002.jpg</image>
      <image>files/portfolio/web/leonmusic/003.jpg</image>
      <image>files/portfolio/web/leonmusic/004.jpg</image>
    </thumbnails>
  </web>
  <web id="10">
    <title>Vakantiehuis Zweekhorst</title>
    <description>Technieken: PHP/MySQL, HTML/CSS, CMS.
De website bevat o.a. een online reserveringssysteem en is meertalig.</description>
    <url>http://www.vakantiehuis-zweekhorst.nl</url>
    <thumbnails>
      <image>files/portfolio/web/zweekhorst/logo.jpg</image>
      <image>files/portfolio/web/zweekhorst/001.jpg</image>
      <image>files/portfolio/web/zweekhorst/002.jpg</image>
    </thumbnails>
  </web>
  <web id="11">
    <title>BSE Hiphop</title>
    <description>Technieken: PHP/MySQL, HTML/CSS, CMS.
De website bevat o.a. een dynamisch nieuwssysteem en gastenboek.</description>
    <url>http://www.bsehiphop.nl</url>
    <thumbnails>
      <image>files/portfolio/web/bsehiphop/logo.jpg</image>
      <image>files/portfolio/web/bsehiphop/001.jpg</image>
      <image>files/portfolio/web/bsehiphop/002.jpg</image>
      <image>files/portfolio/web/bsehiphop/003.jpg</image>
    </thumbnails>
  </web>
</webdesign>

Nu probeer ik met PHP deze XML te parsen naar een array, maar het wil niet helemaal lukken wanneer het niveau dieper is dan 2 stappen...
Ik wil dus een array met de volgende structuur:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
array(4) {
  ["id"]=> 
  int(2) 11
  ["title"]=>
  string(25) "BSE Hiphop"
  ["description"]=>
  string(41) "Technieken: PHP/MySQL, HTML/CSS, CMS.
De website bevat o.a. een dynamisch nieuwssysteem en gastenboek."
  ["url"]=>
  string(27) "http://www.bsehiphop.nl"
  ["thumbnails"]=>
  array(4) {
    string() "files/portfolio/web/bsehiphop/logo.jpg"
    string() "files/portfolio/web/bsehiphop/001.jpg"
    string() "files/portfolio/web/bsehiphop/002.jpg"
    string() "files/portfolio/web/bsehiphop/003.jpg"
  }
}

Ik heb een hoop tutorials bekeken en de user notes op PHP.net tussen die XML pagina's, maar er zitten een hoop notes bij die niet werken. En vaak gebruiken ze methodes die ik niet helemaal snap...

Het makkelijkste lijkt me een recursieve functie schrijven om de childNodes te vinden, alleen ik snap niet hoe ik een array kan genereren die multi-dimensionaal is. Dus een array genereren met meerdere niveaus.

Kan iemand mij dit misschien met een simpel voorbeeld uitleggen? Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 22 juni 2004 @ 14:57:
Het makkelijkste lijkt me een recursieve functie schrijven om de childNodes te vinden, alleen ik snap niet hoe ik een array kan genereren die multi-dimensionaal is. Dus een array genereren met meerdere niveaus.
Dan kun je altijd nog een array met arrays als elementen met arrays als elementen met arrays al...... ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NMe84 schreef op 22 juni 2004 @ 15:11:
[...]

Dan kun je altijd nog een array met arrays als elementen met arrays als elementen met arrays al...... ;)
Thanks! Ik snap niet waar je heen wilt hoor... :p

Acties:
  • 0 Henk 'm!

  • Terranca
  • Registratie: April 2000
  • Laatst online: 18-09 18:25
Niet zo heel lastig in PHP hoor :)

Bedoel je gewoon zoiets:

PHP:
1
$Array = Array ( 1 => "Titel", 2 => "Body", 3 => Array ( "Copyrights", "Trademark" ) );


Je kan ook gewoon een array achteraf aanpassen:
$Array[4] = Array ( "Ding1", "Ding2" );

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 22 juni 2004 @ 15:22:
Thanks! Ik snap niet waar je heen wilt hoor... :p
Zie Terranca en http://www.php.net/array

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Volgens mij heb ik mijn vraag niet echt duidelijk gesteld. Ik snap hoe een array in elkaar zit, ik snap ook hoe je een multi-dimensionale array kan definiëren, maar niet 'dynamisch'.

Als ik bijv. twee arrays heb ($values en $index) van de functie xml_parse_into_struct():
PHP:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
array(8) {
  [0]=>
  array(4) {
    ["tag"]=>
    string(5) "title"
    ["type"]=>
    string(8) "complete"
    ["level"]=>
    int(3)
    ["value"]=>
    string(25) "Taijischool Westfriesland"
  }
  [1]=>
  array(4) {
    ["tag"]=>
    string(11) "description"
    ["type"]=>
    string(8) "complete"
    ["level"]=>
    int(3)
    ["value"]=>
    string(41) "Technieken gebruikt: PHP/MySQL, HTML, CMS"
  }
  [2]=>
  array(4) {
    ["tag"]=>
    string(3) "url"
    ["type"]=>
    string(8) "complete"
    ["level"]=>
    int(3)
    ["value"]=>
    string(27) "http://www.taijischoolwf.nl"
  }
  [3]=>
  array(3) {
    ["tag"]=>
    string(10) "thumbnails"
    ["type"]=>
    string(4) "open"
    ["level"]=>
    int(3)
  }
  [4]=>
  array(4) {
    ["tag"]=>
    string(5) "image"
    ["type"]=>
    string(8) "complete"
    ["level"]=>
    int(4)
    ["value"]=>
    string(42) "files/portfolio/web/taijischoolwf/logo.jpg"
  }
  [5]=>
  array(4) {
    ["tag"]=>
    string(5) "image"
    ["type"]=>
    string(8) "complete"
    ["level"]=>
    int(4)
    ["value"]=>
    string(41) "files/portfolio/web/taijischoolwf/001.jpg"
  }
  [6]=>
  array(4) {
    ["tag"]=>
    string(5) "image"
    ["type"]=>
    string(8) "complete"
    ["level"]=>
    int(4)
    ["value"]=>
    string(41) "files/portfolio/web/taijischoolwf/002.jpg"
  }
  [7]=>
  array(3) {
    ["tag"]=>
    string(10) "thumbnails"
    ["type"]=>
    string(5) "close"
    ["level"]=>
    int(3)
  }
}

Ik wil dus als een element 'open' is een niveau dieper 'genereren'. En als een tag 'close' is weer een niveau omhoog gaan. Iemand ideeën?

[ Voor 23% gewijzigd door Verwijderd op 22-06-2004 15:48 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 22 juni 2004 @ 15:47:
Volgens mij heb ik mijn vraag niet echt duidelijk gesteld. Ik snap hoe een array in elkaar zit, ik snap ook hoe je een multi-dimensionale array kan definiëren, maar niet 'dynamisch'.
Zo zei je het niet in je TS. :)

Ik denk dat je gewoon wat moet knutselen door een variabele $open te maken ofzow die bij houdt hoeveel menu's (het zijn menu's toch?) er open zijn, en die ophogen/verlagen wanneer je "open" resp. "close" tegenkomt. Op basis van de waarde in $open bepaal je dan waar je item komt te staan.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is al gelukt! Ik probeer nu het id-attribuut ook mee te geven in de array... Volgens mij moet ik alleen nog even die $index logica snappen die xml_parse_into_struct() teruggeeft.

edit:
Gelukt. Topic kan dicht

[ Voor 10% gewijzigd door Verwijderd op 22-06-2004 16:27 ]

Pagina: 1