XML & PHP

Overzicht

Sponsored by: Vacatures door Monsterboard

Jens B

Jens B

25/11/2011 09:18:34
Anchor link
Hallo Allemaal,

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 !
 
PHP hulp

PHP hulp

22/12/2024 14:46:21
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

25/11/2011 10:22:41
Anchor link
simplexml_load_string kan je daarvoor gebruiken
 
Jens B

Jens B

25/11/2011 10:38:23
Anchor link
Dankjewel ger !
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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

25/11/2011 11:24:35
Anchor link
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)
 
Erwin H

Erwin H

25/11/2011 11:29:56
Anchor link
Van de 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"
Gewijzigd op 25/11/2011 11:30:13 door Erwin H
 
Jens B

Jens B

25/11/2011 11:57:31
Anchor link
Hey Erwin,

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)
 
Erwin H

Erwin H

25/11/2011 12:04:34
Anchor link
Laat eens precies zien wat je nu hebt en hoe je die xml string uitleest, gebruik je nog steeds simplexml_load_string?
 
Jens B

Jens B

25/11/2011 12:09:07
Anchor link
$client = new SoapClient("http://pad/profitservices/getconnector.asmx?WSDL", array('trace' => 1,'exceptions' => 0 ));

$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 :(
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

25/11/2011 12:11:24
Anchor link
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
 
Jens B

Jens B

25/11/2011 12:19:40
Anchor link
Sorry dat is mijn fout geweest..
De xml die ik terug krijg is veel langer, heb hem ingekort tot 3 kolommen.
Iets teveel weggehaalt dus..
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

25/11/2011 12:32:31
Anchor link
Oké, maar het feit blijft dat als ik de xml uit je startpost in een varaibele zet en de aanpassing doe ik gewoon netjes een array terugkrijg.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
?>

Output:
SimpleXMLElement Object
(
[Debiteuren] => Array
(
[0] => SimpleXMLElement Object
(
[OrgId] => 12345
[Bedrijf] => Jens Bedrijf
[DebiteurID] => 10951
)

[1] => SimpleXMLElement Object
(
[OrgId] => 12345
[Bedrijf] => Guardian
[DebiteurID] => 10898
)

)

)
 
Erwin H

Erwin H

25/11/2011 12:38:11
Anchor link
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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

25/11/2011 12:52:19
Anchor link
De elementen kunnen op zelfde manier benaderd worden zoals je array elementen benaderd
Gewijzigd op 25/11/2011 12:58:51 door Ger van Steenderen
 
Jens B

Jens B

25/11/2011 13:28:16
Anchor link
Oke Ger

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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

25/11/2011 13:47:28
Anchor link
Ik vermoed dat er toch ergens een fout in de response zit, heb je foutmeldingen aanstaan?
 
Jens B

Jens B

25/11/2011 13:56:42
Anchor link
Ja maar heb geen fout :-(
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);

}
 
 

Dit topic is gesloten.



Overzicht

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.