Ik maak een API wrapper (REST) om een vrij complexe SOAP service wat makkelijker in gebruik te maken. Hiervoor gebruik ik Slim Framework. Ik ontwikkeld eerst wat classes om deze later te gebruiken binnen het framework. Nu loop ik vast met het verwerken van de response berichten.
Met de onderstaande code genereer ik een request bericht. Dit verstuur ik via Curl.
Vervolgens krijg ik onderstaand bericht terug. Hier wil ik later elementen uit verwijderen, toevoegen en wijzigen om een nieuw request bericht te genereren.Het lukt mij niet om onderstaand bericht (wat waardes verwijderd om dit anonimiseren) op een juiste manier te lezen.
[code=xml]
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<s:RelatieLezenViaNummerResponse
xmlns="http://schemas.xxx.nl/datacatalogus/modellen/modelrelatie"
xmlns:bt="http://schemas.xxx.nl/datacatalogus/basistypes"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:s="http://schemas.xxx.nl/services/xxxservice">
<s:RelatieLezenViaNummerResult>
<adres>Testadres</adres>
<afdelingscode />
<afgiftedatumeersterijbewijs xsi:nil="true" />
<afgiftedatumlegitimatie xsi:nil="true" />
<afgiftedatumrijbewijs>1990-01-01</afgiftedatumrijbewijs>
<ziektekostencode />
<zzpproducten>N</zzpproducten>
<gezinslid>
<burgerservicenummer />
<geboortedatum>2006-01-01</geboortedatum>
<geslacht>M</geslacht>
<idgezinslid>71761</idgezinslid>
<inwonend>1</inwonend>
<naam>Testkind1</naam>
<overlijdensdatum xsi:nil="true" />
<relatieidgezinslid>0</relatieidgezinslid>
<relatienummer>123456</relatienummer>
<roepnaam>Tinus</roepnaam>
<voorletters>T</voorletters>
<voorvoegsels />
</gezinslid>
<gezinslid>
<burgerservicenummer />
<geboortedatum>2005-01-01</geboortedatum>
<geslacht>V</geslacht>
<roepnaam>Tinustwee</roepnaam>
<voorletters>TT</voorletters>
<voorvoegsels />
</gezinslid>
<partner>
<afgiftedatumeersterijbewijs xsi:nil="true" />
<afgiftedatumlegitimatie xsi:nil="true" />
<afgiftedatumrijbewijs xsi:nil="true" />
<bedrijfsspaarregeling>0</bedrijfsspaarregeling>
<beroepscode>0</beroepscode>
<burgerservicenummer>123456</burgerservicenummer>
<emailadres />
<geboortedatum>1979-11-20</geboortedatum>
<geslacht>V</geslacht>
<legitimatienummer />
<naam>Testje</naam>
<nationaliteit>NL</nationaliteit>
<omsberoepscode />
<omsnationaliteit>Nederlandse</omsnationaliteit>
<omstitulatuurcode>Mevrouw</omstitulatuurcode>
<overlijdensdatum xsi:nil="true" />
<relatieidpartner>0</relatieidpartner>
<relatienummer>123456</relatienummer>
<rijbewijscategorie />
<roepnaam />
<soortlegitimatie />
<titel />
<titulatuurcode>2</titulatuurcode>
<voorletters>T.</voorletters>
<voorvoegsels>van</voorvoegsels>
</partner>
<rekeningnummer>
<bicnummer>INGBNL2A</bicnummer>
<tenaamstelling />
<volgnummer>2</volgnummer>
</rekeningnummer>
<werk>
<aardwerkzaamheden />
<emolumenten>0</emolumenten>
<emolumentenperc>0</emolumentenperc>
<extramaanden>0</extramaanden>
</werk>
<zaak>
<aantalpersoneelsleden>0</aantalpersoneelsleden>
<bedrijfscode>0</bedrijfscode>
<bikcode>741230</bikcode>
<kvknummer />
<woonplaatskvk />
</zaak>
</s:RelatieLezenViaNummerResult>
</s:RelatieLezenViaNummerResponse>
</soap:Body>
</soap:Envelope>'
[/code=xml]
Ik wil de elementen teruggeven als return via een aparte functie of class en deze bewerken. Hiervoor moet ik deze natuurlijk eerst kunnen lezen. Daarvoor gebruik ik onderstaande code.
Wanneer ik vervolgens de gegevens probeer op te slaan dan lukt dit niet.
Wat doe ik hier verkeerd?
Wanneer ik een Xpath query gebruik op onderstaande wijze lijkt het wel te werken.
Hoe kan ik hier alleen attributen en waarden uit krijgen om deze later verder te verwerken. De $echo geeft niets terug.
Met de onderstaande code genereer ik een request bericht. Dit verstuur ik via Curl.
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
| class Soap_API { private $relatienummer; // This is the construct to start public function __construct( $relatienummer ) { $this->relatienummer = $relatienummer; } public function create_request(){ // Function to reaturn SOAP header and envelope. // Define namespace URI'a $xml_soap_uri = 'http://schemas.xxx.nl/soap'; $xml_soapenv_uri = 'http://schemas.xmlsoap.org/soap/envelope/'; $xml_body_uri = 'http://schemas.xxx.nl/services/relatieservice'; //Create header $xml = new SimpleXMLElement('<soapenv:Envelope></soapenv:Envelope>', LIBXML_NOERROR, false, 'soapenv', true); $xml->addAttribute('xmlns:xmlns:soapenv', $xml_soapenv_uri); $xml->addAttribute('xmlns:xmlns:soap', $xml_soap_uri); $xml->addAttribute('xmlns:xmlns:rel', 'http://schemas.xxx.nl/services/relatieservice'); $header = $xml->addChild("soapenv:Header", null, $xml_soapenv_uri ); $sub_header = $header->addChild("soap:header", null, $xml_soap_uri); //Set credentials $sub_header->addChild('soap:account', 'xxx', $xml_soap_uri); $sub_header->addChild('soap:naam', 'xxx', $xml_soap_uri); $sub_header->addChild('soap:wachtwoord', 'xxx', $xml_soap_uri); $sub_header->addChild('soap:bedrijfsnummer', 'xxx', $xml_soap_uri); $sub_header->addChild('soap:tussenpersoonnummer', 'xxx', $xml_soap_uri); //Create body $body = $xml->addChild("soapenv:Body", null, $xml_soapenv_uri); $make = $body->addChild("rel:RelatieLezenViaNummer", null, $xml_body_uri); $make = $make->addChild("rel:relatieNummer", $this->relatienummer, $xml_body_uri); $xml = $xml->asXML(); return $xml; } } |
Vervolgens krijg ik onderstaand bericht terug. Hier wil ik later elementen uit verwijderen, toevoegen en wijzigen om een nieuw request bericht te genereren.Het lukt mij niet om onderstaand bericht (wat waardes verwijderd om dit anonimiseren) op een juiste manier te lezen.
[code=xml]
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<s:RelatieLezenViaNummerResponse
xmlns="http://schemas.xxx.nl/datacatalogus/modellen/modelrelatie"
xmlns:bt="http://schemas.xxx.nl/datacatalogus/basistypes"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:s="http://schemas.xxx.nl/services/xxxservice">
<s:RelatieLezenViaNummerResult>
<adres>Testadres</adres>
<afdelingscode />
<afgiftedatumeersterijbewijs xsi:nil="true" />
<afgiftedatumlegitimatie xsi:nil="true" />
<afgiftedatumrijbewijs>1990-01-01</afgiftedatumrijbewijs>
<ziektekostencode />
<zzpproducten>N</zzpproducten>
<gezinslid>
<burgerservicenummer />
<geboortedatum>2006-01-01</geboortedatum>
<geslacht>M</geslacht>
<idgezinslid>71761</idgezinslid>
<inwonend>1</inwonend>
<naam>Testkind1</naam>
<overlijdensdatum xsi:nil="true" />
<relatieidgezinslid>0</relatieidgezinslid>
<relatienummer>123456</relatienummer>
<roepnaam>Tinus</roepnaam>
<voorletters>T</voorletters>
<voorvoegsels />
</gezinslid>
<gezinslid>
<burgerservicenummer />
<geboortedatum>2005-01-01</geboortedatum>
<geslacht>V</geslacht>
<roepnaam>Tinustwee</roepnaam>
<voorletters>TT</voorletters>
<voorvoegsels />
</gezinslid>
<partner>
<afgiftedatumeersterijbewijs xsi:nil="true" />
<afgiftedatumlegitimatie xsi:nil="true" />
<afgiftedatumrijbewijs xsi:nil="true" />
<bedrijfsspaarregeling>0</bedrijfsspaarregeling>
<beroepscode>0</beroepscode>
<burgerservicenummer>123456</burgerservicenummer>
<emailadres />
<geboortedatum>1979-11-20</geboortedatum>
<geslacht>V</geslacht>
<legitimatienummer />
<naam>Testje</naam>
<nationaliteit>NL</nationaliteit>
<omsberoepscode />
<omsnationaliteit>Nederlandse</omsnationaliteit>
<omstitulatuurcode>Mevrouw</omstitulatuurcode>
<overlijdensdatum xsi:nil="true" />
<relatieidpartner>0</relatieidpartner>
<relatienummer>123456</relatienummer>
<rijbewijscategorie />
<roepnaam />
<soortlegitimatie />
<titel />
<titulatuurcode>2</titulatuurcode>
<voorletters>T.</voorletters>
<voorvoegsels>van</voorvoegsels>
</partner>
<rekeningnummer>
<bicnummer>INGBNL2A</bicnummer>
<tenaamstelling />
<volgnummer>2</volgnummer>
</rekeningnummer>
<werk>
<aardwerkzaamheden />
<emolumenten>0</emolumenten>
<emolumentenperc>0</emolumentenperc>
<extramaanden>0</extramaanden>
</werk>
<zaak>
<aantalpersoneelsleden>0</aantalpersoneelsleden>
<bedrijfscode>0</bedrijfscode>
<bikcode>741230</bikcode>
<kvknummer />
<woonplaatskvk />
</zaak>
</s:RelatieLezenViaNummerResult>
</s:RelatieLezenViaNummerResponse>
</soap:Body>
</soap:Envelope>'
[/code=xml]
Ik wil de elementen teruggeven als return via een aparte functie of class en deze bewerken. Hiervoor moet ik deze natuurlijk eerst kunnen lezen. Daarvoor gebruik ik onderstaande code.
PHP:
1
2
3
4
| $xmlxxx = new SimpleXMLElement($xmldoc); // register namespaces $xmlxxx->registerXPathNamespace('s', 'http://schemas.xxx.nl/services/relatieservice'); $xmlxxx->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/"'); |
Wanneer ik vervolgens de gegevens probeer op te slaan dan lukt dit niet.
PHP:
1
| $items = $xml->Envelope->Body->RelatieLezenViaNummerResponse->RelatieLezenViaNummerResult; |
Wat doe ik hier verkeerd?
Wanneer ik een Xpath query gebruik op onderstaande wijze lijkt het wel te werken.
PHP:
1
2
3
4
| foreach ($xmlxxx->xpath('/soap:Envelope/soap:Body/s:RelatieLezenViaNummerResponse/s:RelatieLezenViaNummerResult') as $values) { echo $values "\n"; } |
Hoe kan ik hier alleen attributen en waarden uit krijgen om deze later verder te verwerken. De $echo geeft niets terug.