[PHP/SOAP/XML] Element toevoegen in SOAP-verkregen XML

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 24-05 15:42
Ik ben bezig met het opzetten van een webshop.. om zoveel mogelijk automatisch te doen kunnen we veel productgegevens van een leverancier verkrijgen via SOAP. Ik kan met een GetProductByName soapCall alle gegevens van een bepaald artikelnummer opvragen, en dan komt er een mooi stukje XML uitrollen met alle gegevens van dat product.

Daar staan echter nog geen verkoopprijzen in, omdat wij die zelf bepalen. We hebben deze echter wel al beschikbaar, zij het in een Excel-file (twee kollomen, één met het artikelnummer, het tweede met de prijs). Deze heb ik al omgezet naar een simpele .csv omdat daar beter mee te werken valt.

Wat ik dus wil doen, is de prijzen uit de csv-file toevoegen aan de XML die uit de SoapCall komt rollen. Tevens wil ik deze soapCall aan de hand van de Excel-file loopen om zo meerdere artikels tegelijk op te vragen. Dit laatste gaat al prima.
Op het toevoegen van de prijs als Element in de XML loop ik echter vast.

Als testcase heb ik een kleine .csv gemaakt met drie artikels:
code:
1
2
3
WS1070; 92,50 
WS1080; 139,95 
WS1170; 47,50


De code die ik momenteel heb om de artikelgegevens uit op te halen ziet er momenteel zo uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
echo "<Catalog>";
$row = 1;
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
    $productid = $data[0];
    $productprice = $data[1];
    
    $response = $client->__soapCall('GetProductByName', array(
                            array(
                                'productName' => $productid,
                                'langCode'    => 'nl'
                                )
                        ));
    echo $response->GetProductByNameResult->any;
    //echo $productprice;
}
fclose($handle);
echo "</Catalog>";


Ik loop dus het .csv'tje, het artikelnummer wordt $productid, vervolgens vraag ik hier met de SoapCall de productgevens op. Dat gaat prima, ik krijg deze xml (verkleind als voorbeeld):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<Catalog>
  <Product>
    <Id>370406</Id>
    <Name>WS1070</Name>
    <Description>DRAADLOOS WEERSTATION, DCF-KLOK, BUITENSENSOR</Description>
  </Product>
  <Product>
    <Id>374584</Id>
    <Name>WS1080</Name>
    <Description>WEERSTATION MET TOUCHSCREEN EN PC-AANSLUITING</Description>
  </Product>
  <Product>
    <Id>370356</Id>
    <Name>WS1170</Name>
    <Description>DRAADLOOS WEERSTATION MET DCF-KLOK EN BUITENSENSOR</Description>
  </Product>
</Catalog>


Nu wil ik dus de prijs, die ik uit het .csv haal en onder de php-var $productprice beschikbaar is, toevoegen als XML-element:
code:
1
2
3
4
5
6
  <Product>
    <Id>370356</Id>
    <Name>WS1170</Name>
    <Description>DRAADLOOS WEERSTATION MET DCF-KLOK EN BUITENSENSOR</Description>
    <Price>47,50</Price>
  </Product>


En hier heb ik dus geen flauw idee meer wat ik moet doen.
Ik begrijp dat ik de soap-verkregen XML anders zal moeten afvangen/printen dan met
code:
1
echo $response->GetProductByNameResult->any;

zodat ik daar ergens iets tussen kan invullen, maar ik heb geen flauw idee hoe ik dit moet doen.

Met php ben ik tamelijk bekend maar dit is de eerste keer dat ik wat met Soap en XML doe. Heb al allerlei tutorials, manuals etc. op dit gebied doorgelezen maar heb de juiste dingen nog niet gevonden. Ook alle topics hier op GoT over Soap heb ik weinig aan.
Heb gezocht op vele combinaties van keywords soap, xml, php "insert xml element", "print soap xml".. Maar ben niks relevants tegengekomen. Gebruik dus waarschijnlijk niet de goede zoekwoorden maar dat komt dus waarschijnlijk omdat ik niet genoeg van de materie ken om de juiste keywords te kennen.

Iemand die me een handje kan helpen of een duwtje in de juiste richting kan geven?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Vraag numero uno: Waarom moet het in de letterlijke response gefrot worden? Weet je zeker dat je het niet in een echte (relationele) database wilt?

Als je dan toch een antwoord op je vraag wilt: laad de xml in met SimpleXML, pak de elementen die je wilt erbij en assign een price property.

Max 5 minuten werk, maar dan heb je nog steeds geen mooie DB ;)

{signature}


Acties:
  • 0 Henk 'm!

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 24-05 15:42
Het Webwinkel-pakket waarmee we werken (Easy Business Tools 5) kan rechtstreeks artikelgegevens importeren vanuit een XML-file.

Ik ben dus geen complete webshop aan het ontwikkelen, daar heb ik niet de capaciteiten voor en bovendien is het niet echt nodig om voor de honderdste keer het wiel uit te vinden als er prima pakketten op de markt zijn voor een paar tientjes of zelfs gratis (osCommerce).

Het enige wat ik dus wel wil doen, en wat me ook wel gaat lukken, is de gegevens van deze leverancier ophalen, koppelen met de prijzen, en deze importeren in EBT.

Ik zal eens met SimpleXML gaan stoeien. Thx voor de tip :)