Ik ben bezig een site om te zetten naar een Ajax achtige applicatie, maar stuit op problemen bij het maken van de xml die de server terug stuurt naar de client. De opzet is nog vrij simpel. De server ontvangt een opdracht in XML, parst de xml en voert een database query uit. De script zet de result om in een array en transformeert deze dan naar XML om terug te sturen.
Overigens gebeurt het opbouwen en parsen van de XML via de dom extensie van PHP5.
Het probleem is het opbouwen van dat laatste stuk XML. De database query geeft namelijk een (lange) xhtml string terug die voorheen zo geinclude werd in de pagina. De string is een text met paragrafen (<p></p>) en headers (<h3></h3>). Die text komt niet in het XML voor, waarschijnlijk (denk ik) omdat het geen text node betreft.
Graag zou ik weten of ik de xhtml string wel mee kan sturen en hoe! Ik kom er zelf niet uit.
De xml die ik nu krijg:
En de script die het opbouwt:
En de array:
Volgens mij is dit nog vrij knullig opgebouwd, een suggestie of (opbouwend) kritiek is altijd welkom!
Overigens gebeurt het opbouwen en parsen van de XML via de dom extensie van PHP5.
Het probleem is het opbouwen van dat laatste stuk XML. De database query geeft namelijk een (lange) xhtml string terug die voorheen zo geinclude werd in de pagina. De string is een text met paragrafen (<p></p>) en headers (<h3></h3>). Die text komt niet in het XML voor, waarschijnlijk (denk ik) omdat het geen text node betreft.
Graag zou ik weten of ik de xhtml string wel mee kan sturen en hoe! Ik kom er zelf niet uit.
De xml die ik nu krijg:
XML:
1
2
3
4
5
6
7
| <?xml version="1.0" encoding="UTF-8"?> <response> <content id="255_086" type="bio"> <text/> <link>www.juliansas.com</link> </content> </response> |
En de script die het opbouwt:
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
| // create a new XML document $doc = new DomDocument('1.0', 'UTF-8'); $doc->formatOutput = true; // create root node $root = $doc->createElement('response'); $root = $doc->appendChild($root); foreach($result as $node => $value){ switch($node){ case "cat": $cat = $doc->createElement($value); $cat = $root->appendChild($cat); break; case "type": if(isset($cat)){ $cat->setAttribute('type', $value); } break; case "id": if(isset($cat)){ $cat->setAttribute('id', $value); } break; default: if(isset($cat)){ $$node = $doc->createElement($node); $$node = $cat->appendChild($$node); $text = $doc->createTextNode($value); $text = $$node->appendChild($text); } } } |
En de array:
PHP:
1
2
3
4
5
6
| Array ( [0] => Array ( [cat] => content [id] => 255_086 [text] => *hier lange xtml string* [link] => www.juliansas.com [type] => bio ) ) |
Volgens mij is dit nog vrij knullig opgebouwd, een suggestie of (opbouwend) kritiek is altijd welkom!