Post veld met XML data uitlezen en verwerken via PHP
Ik probeer een simpel script te maken op een php pagina waar je d.m.v. een http post xml data kan posten en ik wil dat dan graag uitlezen en verwerken.
Wanneer ik het volgende in mijn script zet:
Krijg ik netjes de post data te zien (en dat is de XML data) denk aan zoiets:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<info>
<voornaam>Sebas</voornaam>
<achternaam>...</achternaam>
<tel>06123456789</tel>
</info>
<info>
<voornaam>Sebas</voornaam>
<achternaam>...</achternaam>
<tel>06123456789</tel>
</info>
Maar wanneer ik het volgende gebruik:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$postData = file_get_contents('php://input');
$xml = simplexml_load_string($postData);
echo $xml;
?>
$postData = file_get_contents('php://input');
$xml = simplexml_load_string($postData);
echo $xml;
?>
Dan blijft alles leeg...
Wanneer ik dit doe:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$postData = file_get_contents('php://input');
$xml = simplexml_load_string($postData);
echo $postData ;
?>
$postData = file_get_contents('php://input');
$xml = simplexml_load_string($postData);
echo $postData ;
?>
Krijg ik het volgende te zien (wel meer maar dit is een deel van wat ik terugkrijg):
data=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E%0A%3
Wat doe ik fout waardoor de simplexml_load_string niet werkt?
En hoe zou ik de XML data vanuit de post kunnen verwerken zodat ik kan gaan filteren op de tags die erin komt of die voldoen aan bepaalde waardes?
Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 27/08/2019 19:45:35 door - Ariën -
Quote:
Wat doe ik fout waardoor de simplexml_load_string niet werkt?
Dit komt omdat de superglobals $_POST en $_GET (waar je in feite (o.a.) uit leest als je $_REQUEST gebruikt) automatisch door urldecode() worden gehaald. Als je rechtstreeks van een stream leest krijg je gewoon de rauwe data omdat er geen echte context bijgeleverd wordt die aangeeft hoe de data geïnterpreteerd zou moeten worden. En als je daar dan vervolgens rechtstreeks mee aan de slag gaat met functies die valide XML verwachten (terwijl dit dit dus rauwe url-encoded data is) dan kunnen dat soort functies er logischerwijs ook geen chocola van maken.
Quote:
En hoe zou ik de XML data vanuit de post kunnen verwerken zodat ik kan gaan filteren op de tags die erin komt of die voldoen aan bepaalde waardes?
Het ophalen/uitlezen van XML en hier vervolgens in gaan spitten staan in principe los van elkaar. Zorg eerst dat het uitgelezen ding een valide XML-string is zodat je deze kunt importeren in simplexml. Vervolgens zal het een kwestie zijn van door de tags itereren of filteren met de functies waar SimpleXML over beschikt. Maar dat is een apart vraagstuk.