In het kader van "iets nieuws proberen" ben ik een beetje aan het spelen met simplexml in PHP. Ik heb de volgende situatie:
Er is een XML-bestand (data.xml) met daarin allerlei nodes. Ik wil met een simpel stukje PHP op basis van die basis-xml een nieuw XML bestand maken. Met een aantal aanpassingen. Nu is de inhoud van data.xml variabel, dus wil ik mijn PHP script ook variabel opzetten. Ik heb daarom in het XML bestand wat metadata aan de nodes meegegeven zodat mijn PHP script weet hoe ermee omgegaan moet worden. Voorbeeld:
In mijn PHP script open in met simplexml_load_file() het XML bestand en loop er vervolgens doorheen om in een formulier <input>'s te maken. XML-nodes met type="inline" krijgen een <input type="text"> en nodes met een type="multiline" krijgen een <textarea>. De name-values van die inputs haal ik uit het id-attribuut van de XML-node. Zo ver, zo goed.
Maar nu het stukje waaruit blijkt dat mijn PHP-skills niet helemaal je van het zijn. Want: hoe sla ik het op? Ik heb zelf bedacht dat ik (nadat het formulier gesubmit is) nog een keer door de basis XML loop en vervolgens per node kijk of er een $_POST variabele is die correspondeert met het id van die node (dus $_POST[$nodeID]).
Hier gaat het volledig mis. Dit is wat ik nu heb:
Buiten het feit dat ik om aan $id te komen eerst dat ding expliciet naar een string moet casten (vind ik smerig, maar ik weet niet hoe het netter moet), werkt dit niet. Als ik nu de XML-source output krijg ik gewoon de onaangepaste XML te zien. En ik snap ook wel waarom: als ik $text = $_POST[$id]; doe pas ik alleen de instantie van $text in die iteratie van de foreach-loop aan.
Maar wat ik niet snap is: hoe doe ik dit wel? Volgens mij zit ik totaal in de verkeerde richting te denken, dus een zetje de goede kant op zou mij zeer blij maken
Er is een XML-bestand (data.xml) met daarin allerlei nodes. Ik wil met een simpel stukje PHP op basis van die basis-xml een nieuw XML bestand maken. Met een aantal aanpassingen. Nu is de inhoud van data.xml variabel, dus wil ik mijn PHP script ook variabel opzetten. Ik heb daarom in het XML bestand wat metadata aan de nodes meegegeven zodat mijn PHP script weet hoe ermee omgegaan moet worden. Voorbeeld:
XML:
1
| <text allow_edit="1" type="inline" id="button_close" description="Close button">CLOSE</text> |
In mijn PHP script open in met simplexml_load_file() het XML bestand en loop er vervolgens doorheen om in een formulier <input>'s te maken. XML-nodes met type="inline" krijgen een <input type="text"> en nodes met een type="multiline" krijgen een <textarea>. De name-values van die inputs haal ik uit het id-attribuut van de XML-node. Zo ver, zo goed.
Maar nu het stukje waaruit blijkt dat mijn PHP-skills niet helemaal je van het zijn. Want: hoe sla ik het op? Ik heb zelf bedacht dat ik (nadat het formulier gesubmit is) nog een keer door de basis XML loop en vervolgens per node kijk of er een $_POST variabele is die correspondeert met het id van die node (dus $_POST[$nodeID]).
Hier gaat het volledig mis. Dit is wat ik nu heb:
PHP:
1
2
3
4
5
6
| foreach ($xmlSource->texts->text as $text){ $id = (string) $text['id']; if (isset($_POST[$id])){ $text = $_POST[$id]; } } |
Buiten het feit dat ik om aan $id te komen eerst dat ding expliciet naar een string moet casten (vind ik smerig, maar ik weet niet hoe het netter moet), werkt dit niet. Als ik nu de XML-source output krijg ik gewoon de onaangepaste XML te zien. En ik snap ook wel waarom: als ik $text = $_POST[$id]; doe pas ik alleen de instantie van $text in die iteratie van de foreach-loop aan.
Maar wat ik niet snap is: hoe doe ik dit wel? Volgens mij zit ik totaal in de verkeerde richting te denken, dus een zetje de goede kant op zou mij zeer blij maken