[PHP] waardes uit SOAP msg naar sql table of array

Pagina: 1
Acties:
  • 203 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dirkjanvenemann
  • Registratie: December 2006
  • Laatst online: 10-09 15:12
Hoi,

Ik zit met een probleem, tenminste ik weet niet meer hoe ik verder moet. Ik ben bezig een soort van webwinkel te bouwen voor mijn baas en nou haal ik via een SOAP request automatisch een prijslijst op. Het antwoord op die SOAP request wordt opgeslagen als string in een .txt bestand.

Nu is het de bedoeling dat de gegevens uit dat ontvangen SOAP bericht in een database komen te staan. Alles moet gecategoriseerd staan en nu moet dus dat ontvangen SOAP bericht gestript worden van de tags en de waardes geexporteerd naar mysql of in een array o.i.d.

Het SOAP bericht dat ik binnenkrijg ziet er zo uit:
code:
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
HTTP/1.1 200 OK 
Connection: close 
Date: Thu, 07 Dec 2006 19:49:25 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
X-AspNet-Version: 2.0.50727 
Cache-Control: private, max-age=0 
Content-Type: text/xml; charset=utf-8 
Content-Length: 836

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <GetPriceResponse xmlns="http://www.....nl/">
            <GetPriceResult>
                <Product ID="1492" ManufacturerID="MPF920-Z/131" EAN="" xmlns="">
                <Description>SONY Diskdrive 1,44 MB 3,5"</Description><Description2 />
                <VatRate>21</VatRate><QuantityOnHand>400</QuantityOnHand>
                <StockLevel>Good</StockLevel><Status>S</Status><Brand>Sony</Brand>
                <MasterGroup>Basic components</MasterGroup>
                <ProductGroup>Diskdrives &amp; disks</ProductGroup><Staffels>
                <Staffel MinimumQuantity="1" UnitPrice="4.21" />
                <Staffel MinimumQuantity="-9999" UnitPrice="4.21" /></Staffels></Product>
            </GetPriceResult>
        </GetPriceResponse>
    </soap:Body>
</soap:Envelope>


^ Dit wordt ontvangen en verzonden met PHP. Er zijn trouwens c.a. 2400 van die regels (weet niet of dat verschil maakt).

Nu moet je die soap msg zien als een grote string, dus alles staat achter elkaar geplakt en er zitten geen enter's tussen. Nu is het de bedoeling dat de waarden binnen de <GetPriceResult></GetPriceResult> tags naar een tabel worden geschreven en worden ontdaan van hun tags. Ze moeten echter wel in allemaal weer in een apart veld.

Ik weet niet of dit mogelijk is, maar alvast bedankt voor de hulp.

Healingftw :: Spyrol :: :: Ellainez :: Likecold


Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat je dit moet inladen in dom xmldocument en middels xpath query's je data eruit halen. Dat het meerdere regels/producten zijn maakt niet uit...

[ Voor 32% gewijzigd door Verwijderd op 07-12-2006 21:05 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Uhm, ik heb ook weleens met SOAP gewerkt, tijdje terug wel, maar als je een SOAP client gebruikt dan kan je deze waardes toch gewoon terugkrijgen als array's/strings in plaats dat je de hele XML moet gaan parsen.

Lees dit bijv. eens:
http://www.scottnichol.com/nusoapintro.htm

Als je SOAP server die je aanroept een beetje goed is opgezet dan zou het niet zo'n probleem moeten zijn om resultaten te krijgen.

[ Voor 32% gewijzigd door Verwijderd op 07-12-2006 21:12 ]


Acties:
  • 0 Henk 'm!

  • dirkjanvenemann
  • Registratie: December 2006
  • Laatst online: 10-09 15:12
http://xtract.bascomputers.nl:4040/
dit is de link naar de SOAP server met een soort uitleg erbij over de beschikbare services

ik ben totaal niet thuis in SOAP, tot ik ermee bezig moest had ik er nog nooit van gehoord, dus zou niet weten of je de waardes als array of string terug kan krijgen

//edit: dit is mijn request code, dit gaat via nusoap
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
require('NuSOAP.php');
    
$params = '<GeneratePriceList xmlns="http://www.bascomputers.nl/">
                <customerID>hier je klantnr</customerID>
                <password>hier je w8woord</password>
        </GeneratePriceList>';
$namespace = 'http://www.bascomputers.nl/';
$soapaction = 'http://www.bascomputers.nl/GeneratePriceList';
$client = new nusoapclient('http://xtract.bascomputers.nl:4040/Xtract.asmx?WSDL', true);
    
$result = $client->call('GeneratePriceList', $params, $namespace, $soapaction);
    
if(!$err = $client->getError()) {   
    echo $info . $result . $end;
}
else {  
    echo $error . $err . $end;
}
    
$outgoing = $client->request;
$incoming = $client->response;
    
echo $custom . 'Outgoing SOAP Message:' . $customend . $outgoing . $end;
echo $custom . 'Incoming SOAP Message:' . $customend . $incoming . $end;
    
$file = '../Temp/Dump.txt';
$handle = fopen($file, 'w+');
fwrite($handle, $incoming);
fclose($handle);

[ Voor 62% gewijzigd door dirkjanvenemann op 07-12-2006 21:20 ]

Healingftw :: Spyrol :: :: Ellainez :: Likecold


Acties:
  • 0 Henk 'm!

Verwijderd

NuSOAP voorbeeldje:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Pull in the NuSOAP code
require_once('nusoap.php');
// Create the client instance
$client = new soapclient('http://xtract.bascomputers.nl:4040/');
// Call the SOAP method
$result = $client->call('GetPrice', array('customerID' => 10,
                                                'password' => 'myPassword',
                                                'productID' => '1120',
                                                'manufacturerID' => 'nintendo',
                                                'ean' => 'WII',
                                                'quantity' => 10)
                                                );
// Display the result
print_r($result);


Maar wat als je print_r($result); in jouw script doet, wat is dat voor response?

[ Voor 28% gewijzigd door Verwijderd op 07-12-2006 21:26 ]


Acties:
  • 0 Henk 'm!

  • dirkjanvenemann
  • Registratie: December 2006
  • Laatst online: 10-09 15:12
de uitkomst van een request naar product id 1492 met print_r($result);

Array ( [GetPriceResult] => Array ( [Product] => Array ( [Description] => SONY Diskdrive 1,44 MB 3,5" [Description2] => [VatRate] => 21 [QuantityOnHand] => 400 [StockLevel] => Good [Status] => S [Brand] => Sony [MasterGroup] => Basic components [ProductGroup] => Diskdrives & disks [Staffels] => Array ( [Staffel] => Array ( [0] => Array ( [!MinimumQuantity] => 1 [!UnitPrice] => 4.21 ) [1] => Array ( [!MinimumQuantity] => -9999 [!UnitPrice] => 4.21 ) ) ) [!ID] => 1492 [!ManufacturerID] => MPF920-Z/131 [!EAN] => ) ) )

Healingftw :: Spyrol :: :: Ellainez :: Likecold


Acties:
  • 0 Henk 'm!

Verwijderd

Je zou door deze array toch heen kunnen loopen en dan de waardes in een database opslaan?

Acties:
  • 0 Henk 'm!

  • dirkjanvenemann
  • Registratie: December 2006
  • Laatst online: 10-09 15:12
ik ga het proberen

bedankt voor de hulp

Healingftw :: Spyrol :: :: Ellainez :: Likecold


Acties:
  • 0 Henk 'm!

  • SYQ
  • Registratie: Oktober 2001
  • Niet online

SYQ

klein tipje : gooi die print_r tussen <pre> en </pre>, leest veeel makkelijker

Acties:
  • 0 Henk 'm!

  • dirkjanvenemann
  • Registratie: December 2006
  • Laatst online: 10-09 15:12
al gedaan

Afbeeldingslocatie: http://img375.imageshack.us/img375/9215/voorbeeldyg3.png

[ Voor 11% gewijzigd door dirkjanvenemann op 07-12-2006 22:21 ]

Healingftw :: Spyrol :: :: Ellainez :: Likecold

Pagina: 1