XML & PHP
Wie kan mij hiermee helpen..
Ik haal met de afas getconnector informatie op..
Ik moet iets heel eenvoudigs doen met de informatie..
In dit bericht vind je de XML hoe ik het krijg vanuit de getconnector
Hoe kan ik het beste deze xml wegschrijven in een php array
<AfasGetConnector>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="AfasGetConnector">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Debiteuren">
<xs:complexType>
<xs:sequence>
<xs:element name="OrgId" type="xs:string" minOccurs="0"/>
<xs:element name="Bedrijf" type="xs:string" minOccurs="0"/>
<xs:element name="DebiteurID" type="xs:string" minOccurs="0
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Debiteuren>
<OrgId>12345</OrgId>
<Bedrijf>Jens Bedrijf </Bedrijf>
<DebiteurID>10951</DebiteurID>
</Debiteuren>
</AfasGetConnector>
Het gaat me vooral om deze informatie
<Debiteuren>
<OrgId>12345</OrgId>
<Bedrijf>Jens Bedrijf </Bedrijf>
<DebiteurID>10951</DebiteurID>
</Debiteuren>
Die wil ik kunnen gebruiken..
Hoe krijg ik het voor elkaar om die "OrgId" af te vangen in een variable..
Hoor het graag, ik kom er maar niet uit !
simplexml_load_string kan je daarvoor gebruiken
Ik ben daar al mee bezig geweest maar op een of andere manier werkt dat neit
$test = $client->__getLastResponse();
( hier komt die xml uit die ik in mijn begin post laat zien)
$xml = simplexml_load_string($test);
print_r($xml);
het geeft met hetvolgende
SimpleXMLElement Object ( )
Enig idee wat ik fout doe ?
Toevoeging op 25/11/2011 10:58:24:
Kan het zijn dat het maar tekst is wat ik terug krijg ? inplaats van een xml
nee je zou een array terug moeten krijgen, ik vermoed dat jet fout loopt op de schema regels. Je kan deze eerst uitfilteren ofr de php DOM gebruiken (http://www.php.net/manual/en/refs.xml.php)
php manual over simplexml_load_string:
"Takes a well-formed XML string and returns it as an object."
Maar als je verder leest, zou je wel de elementen in het object moeten kunnen aanspreken als normaal. Probeer dus eens "echo $xml->Orgid"
Van de "Takes a well-formed XML string and returns it as an object."
Maar als je verder leest, zou je wel de elementen in het object moeten kunnen aanspreken als normaal. Probeer dus eens "echo $xml->Orgid"
Gewijzigd op 25/11/2011 11:30:13 door Erwin H
Ja ik snap wat je bedoelt maar dat werkt dus niet.. heel vaag vind ik het ook..
Ik heb nu wel al iets meer
$Debiteur = $client->GetData($GetDataParam);
print_r ($Debiteur);
Geeft me alle informatie die ik wil hebben.. heb alleen geen idee hoe ik er mee om moet gaan.. kunnen jullie me hiermee helpen ?
resultaat is
stdClass Object ( [GetDataResult] => 12345Jens Bakels10951)
Laat eens precies zien wat je nu hebt en hoe je die xml string uitleest, gebruik je nog steeds simplexml_load_string?
$filter = '<Filters>
<Filter FilterId="Filter 1">
<Field FieldId="DebiteurID" OperatorType="10">10951%</Field>
</Filter>
</Filters>';
$GetDataParam = array('environmentId'=> "naam",'userId'=>"user",'password'=>"pww",'logonAs'=>"",'connectorId'=>"Debiteuren",'filtersXml'=>$filter);
$Debiteur = $client->GetData($GetDataParam);
print_r ($Debiteur);
Resultaat:
stdClass Object ( [GetDataResult] => 12345Jens Bakels10951)
10951 = een debiteurnummer .. ik wil die los kunnen gebruiken.. :-(
Ik zie echt iets over het hoofd, het is zo makkelijk volgens mij, maar ergens doe ik iets niet goed..waardoor ik veel te lang loop te klote nu :(
Jens, er staat een fout in de xml response die je terug krijgt, daarom leest simplexml_load_string het niet, de fout is deze regel <xs:element name="DebiteurID" type="xs:string" minOccurs="0 daar moet dus nog "/> achter, als ik dat aanpas doet ie het wel
De xml die ik terug krijg is veel langer, heb hem ingekort tot 3 kolommen.
Iets teveel weggehaalt dus..
Code (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
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
<?php
$test='<AfasGetConnector>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="AfasGetConnector">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Debiteuren">
<xs:complexType>
<xs:sequence>
<xs:element name="OrgId" type="xs:string" minOccurs="0"/>
<xs:element name="Bedrijf" type="xs:string" minOccurs="0"/>
<xs:element name="DebiteurID" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Debiteuren>
<OrgId>12345</OrgId>
<Bedrijf>Jens Bedrijf </Bedrijf>
<DebiteurID>10951</DebiteurID>
</Debiteuren>
<Debiteuren>
<OrgId>12345</OrgId>
<Bedrijf>Guardian</Bedrijf>
<DebiteurID>10898</DebiteurID>
</Debiteuren>
</AfasGetConnector>';
$array = simplexml_load_string($test);
echo '<pre>';
print_r($array);
echo '</pre>';
?>
$test='<AfasGetConnector>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="AfasGetConnector">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Debiteuren">
<xs:complexType>
<xs:sequence>
<xs:element name="OrgId" type="xs:string" minOccurs="0"/>
<xs:element name="Bedrijf" type="xs:string" minOccurs="0"/>
<xs:element name="DebiteurID" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Debiteuren>
<OrgId>12345</OrgId>
<Bedrijf>Jens Bedrijf </Bedrijf>
<DebiteurID>10951</DebiteurID>
</Debiteuren>
<Debiteuren>
<OrgId>12345</OrgId>
<Bedrijf>Guardian</Bedrijf>
<DebiteurID>10898</DebiteurID>
</Debiteuren>
</AfasGetConnector>';
$array = simplexml_load_string($test);
echo '<pre>';
print_r($array);
echo '</pre>';
?>
Output:
SimpleXMLElement Object
(
[Debiteuren] => Array
(
[0] => SimpleXMLElement Object
(
[OrgId] => 12345
[Bedrijf] => Jens Bedrijf
[DebiteurID] => 10951
)
[1] => SimpleXMLElement Object
(
[OrgId] => 12345
[Bedrijf] => Guardian
[DebiteurID] => 10898
)
)
)
Correctie, je krijgt een object terug! Dat jij het in een variabele $array stopt is iets anders. Nogal belangrijk, want dat bepaalt hoe je de elementen in het object aanspreekt.
Gewijzigd op 25/11/2011 12:58:51 door Ger van Steenderen
Als ik hardcoded de xml invoer in jou voorbeeld, dan werkt het PERFECT !
De xml is het resultaat van "$client->__getLastResponse() "
Waarom blijft het leeg als ik niet
$test='<AfasGetConnector>
<xs:schema xmlns:xs="http://www..... etc
doe maar
$test = $client->__getLastResponse();
Dankjewel tot het meehlpen zover.. maar ik snap echt niet dat mijn resultaat leeg blijft als ik de $test var hij jou voorbeeld zet zoals hierboven
Ik vermoed dat er toch ergens een fout in de response zit, heb je foutmeldingen aanstaan?
Bizzarste situatie ooit gewoon
Toevoeging op 25/11/2011 14:22:42:
Ik heb het !
Toevoeging op 25/11/2011 14:23:03:
$document = DOMDocument::loadXML($GetDataResponse->GetDataResult);
$debiteuren = $document->getElementsByTagName('Debiteuren');
Toevoeging op 25/11/2011 14:23:41:
foreach($debiteuren as $debiteur) {
$OrgId = ($debiteur->getElementsByTagName('OrgId')->item(0)->nodeValue);
$Bedrijf = ($debiteur->getElementsByTagName('Bedrijf')->item(0)->nodeValue);
$DebiteurID = ($debiteur->getElementsByTagName('DebiteurID')->item(0)->nodeValue);
}