2010-10-13 13 views
5

के बिना एसओएपी प्रतिक्रिया का विश्लेषण कैसे करें मैंने पिछले कुछ दिनों में एसओएपी प्रतिक्रिया का विश्लेषण करने की कोशिश की है लेकिन मैं इसे काम नहीं कर सकता। मैं सभी "प्रजनन" वस्तुओं को प्राप्त करने में सक्षम होना चाहता हूं।सोप क्लाइंट

संपादित करें: मैं इसे SOAP क्लाइंट में निर्मित करने के बजाय ऐसा कर रहा हूं क्योंकि मुझे multi_curl का उपयोग करके समानांतर अनुरोध करने की आवश्यकता है।

<soap-env:envelope xmlns:ns1="http://v3.core.com.productserve.com/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap-env:body> 
    <ns1:getproductlistresponse> 
     <oproduct> 
     <iid>113133802</iid> 
     <icategoryid>270</icategoryid> 
     <imerchantid>1547</imerchantid> 
     <iadult>0</iadult> 
     <sname>The Ashes/5th Test - England v Australia - Day 1</sname> 
     <sawdeeplink>http://www.awin1.com/pclick.php?p=113133802&amp;a=111402&amp;m=1547&amp;platform=cs</sawdeeplink> 
     <sawthumburl>http://images.productserve.com/thumb/1547/113133802.jpg</sawthumburl> 
     <fprice>119.99</fprice> 
     </oproduct> 
     <oproduct> 
     <iid>113133791</iid> 
     <icategoryid>270</icategoryid> 
     <imerchantid>1547</imerchantid> 
     <iadult>0</iadult> 
     <sname>The Ashes/1st Test - England v Australia - Day 1</sname> 
     <sawdeeplink>http://www.awin1.com/pclick.php?p=113133791&amp;a=111402&amp;m=1547&amp;platform=cs</sawdeeplink> 
     <sawthumburl>http://images.productserve.com/thumb/1547/113133791.jpg</sawthumburl> 
     <fprice>69.99</fprice> 
     </oproduct> 
     <oproduct> 
     <iid>51155349</iid> 
     <icategoryid>428</icategoryid> 
     <imerchantid>513</imerchantid> 
     <iadult>0</iadult> 
     <sname>Rapitest DTM 118 Damp Test Meter</sname> 
     <sawdeeplink>http://www.awin1.com/pclick.php?p=51155349&amp;a=111402&amp;m=513&amp;platform=cs</sawdeeplink> 
     <sawthumburl>http://images.productserve.com/thumb/513/51155349.jpg</sawthumburl> 
     <fprice>18.35</fprice> 
     </oproduct> 
     <oproduct> 
     <iid>187948</iid> 
     <icategoryid>474</icategoryid> 
     <imerchantid>496</imerchantid> 
     <iadult>0</iadult> 
     <sname>Rapitest Dm 10 Electrical Multimeter</sname> 
     <sawdeeplink>http://www.awin1.com/pclick.php?p=187948&amp;a=111402&amp;m=496&amp;platform=cs</sawdeeplink> 
     <sawthumburl>http://images.productserve.com/thumb/496/187948.jpg</sawthumburl> 
     <fprice>26.71</fprice> 
     </oproduct> 
     <oproduct> 
     <iid>51155353</iid> 
     <icategoryid>428</icategoryid> 
     <imerchantid>513</imerchantid> 
     <iadult>0</iadult> 
     <sname>Rapitest DM 10 Electrical Multimeter</sname> 
     <sawdeeplink>http://www.awin1.com/pclick.php?p=51155353&amp;a=111402&amp;m=513&amp;platform=cs</sawdeeplink> 
     <sawthumburl>http://images.productserve.com/thumb/513/51155353.jpg</sawthumburl> 
     <fprice>22.7</fprice> 
     </oproduct> 
     <oproduct> 
     <iid>49152850</iid> 
     <icategoryid>474</icategoryid> 
     <imerchantid>1366</imerchantid> 
     <iadult>0</iadult> 
     <sname>Testboy Profi LED Plus</sname> 
     <sawdeeplink>http://www.awin1.com/pclick.php?p=49152850&amp;a=111402&amp;m=1366&amp;platform=cs</sawdeeplink> 
     <sawthumburl>http://images.productserve.com/thumb/1366/49152850.jpg</sawthumburl> 
     <fprice>44.99</fprice> 
     </oproduct> 
     <oproduct> 
     <iid>51155350</iid> 
     <icategoryid>428</icategoryid> 
     <imerchantid>513</imerchantid> 
     <iadult>0</iadult> 
     <sname>Rapitest ETP 116 Electrical Test Probe</sname> 
     <sawdeeplink>http://www.awin1.com/pclick.php?p=51155350&amp;a=111402&amp;m=513&amp;platform=cs</sawdeeplink> 
     <sawthumburl>http://images.productserve.com/thumb/513/51155350.jpg</sawthumburl> 
     <fprice>17.55</fprice> 
     </oproduct> 
     <oproduct> 
     <iid>51155351</iid> 
     <icategoryid>428</icategoryid> 
     <imerchantid>513</imerchantid> 
     <iadult>0</iadult> 
     <sname>Rapitest ET 111 Electrical Test Meter</sname> 
     <sawdeeplink>http://www.awin1.com/pclick.php?p=51155351&amp;a=111402&amp;m=513&amp;platform=cs</sawdeeplink> 
     <sawthumburl>http://images.productserve.com/thumb/513/51155351.jpg</sawthumburl> 
     <fprice>13.55</fprice> 
     </oproduct> 
     <oproduct> 
     <iid>72326941</iid> 
     <icategoryid>474</icategoryid> 
     <imerchantid>496</imerchantid> 
     <iadult>0</iadult> 
     <sname>Rapitest Etp 116 Electrical Test Probe</sname> 
     <sawdeeplink>http://www.awin1.com/pclick.php?p=72326941&amp;a=111402&amp;m=496&amp;platform=cs</sawdeeplink> 
     <sawthumburl>http://images.productserve.com/thumb/496/72326941.jpg</sawthumburl> 
     <fprice>20.66</fprice> 
     </oproduct> 
     <oproduct> 
     <iid>49338340</iid> 
     <icategoryid>206</icategoryid> 
     <imerchantid>80</imerchantid> 
     <iadult>0</iadult> 
     <sname>Ladies Protest Zekke Jacket True Black</sname> 
     <sawdeeplink>http://www.awin1.com/pclick.php?p=49338340&amp;a=111402&amp;m=80&amp;platform=cs</sawdeeplink> 
     <sawthumburl>http://images.productserve.com/thumb/80/49338340.jpg</sawthumburl> 
     <fprice>54.99</fprice> 
     </oproduct> 
     <itotalcount>6350</itotalcount> 
    </ns1:getproductlistresponse> 
    </soap-env:body> 
</soap-env:envelope> 

उत्तर

3

क्या आप स्पष्ट कर सकते हैं कि आप किस PHP का उपयोग कर रहे हैं (4 या 5)? क्या कोई विशेष कारण है कि आप PHP 5 के SOAP एक्सटेंशन का उपयोग नहीं करना चाहते/नहीं कर सकते हैं? इस जानकारी को जानने से हमें आपको बेहतर उत्तर देने में मदद मिलनी चाहिए।

कारण कोड नमूना ऊपर काम नहीं कर रहा है यह है कि आप प्रोडक्ट नोड्स के लिए गलत नेमस्पेस देख रहे हैं। जबकि रूट नोड एसओएपी नेमस्पेस में निहित है, प्रजनन वाले लोग "http://v3.core.com.productserve.com/" नामस्थान के अंतर्गत हैं। आपको XPath क्वेरी में नेमस्पेस उपनाम का भी उपयोग करने की आवश्यकता है। इसे आज़माएं, हालांकि मैंने इसका परीक्षण नहीं किया है:

$xml = simplexml_load_string($response); 
$xml->registerXPathNamespace('ns', 'http://v3.core.com.productserve.com/'); 
foreach ($xml->xpath('//ns:oproduct') as $item) 
{ 
    // do something 
} 

उम्मीद है कि आपकी तत्काल समस्या हल हो जाएगी।

EDIT स्पष्टीकरण के लिए धन्यवाद। फिर, अपरीक्षित लेकिन शायद यह काम करेगा: क्वेरी में oproduct नोड्स के लिए शरीर:

$xml = simplexml_load_string($response); 
$xml->registerXPathNamespace('soapenv', 'http://schemas.xmlsoap.org/soap/envelope/'); 
$xml->registerXPathNamespace('ns', 'http://v3.core.com.productserve.com/'); 
foreach ($xml->xpath('/soapenv:envelope/soapenv:body/ns:getproductlistresponse/ns:oproduct') as $item) 
    { 
     // do something 
    } 

शायद आप साबुन-पर्यावरण के लिए रूट नोड से जाने की जरूरत है। उम्मीद है कि काम करेगा।

आगे संपादित करें: मुझे लगता है कि मैंने इसे अभी तोड़ दिया है। निम्न कोड आज़माएं:

$xml = simplexml_load_string($response); 
$ns = $xml->getNamespaces(true); 
$soap = $xml->children($ns['soap-env']); 
$getproductlistresponse = $soap->body->children($ns['ns1']); 
foreach ($getproductlistresponse->children() as $item) 
{ 
    //This example just accesses the iid node but the others are all available. 
    echo (string) $item->iid . '<br />'; 
} 

सबसे सुंदर कोड नहीं है लेकिन यह काम करता है। मैं इसे XPath क्वेरी के साथ काम करने की उम्मीद कर रहा था लेकिन यह XPath के मेरे प्राथमिक ज्ञान से परे था। शायद कोई और XPath का उपयोग कर उत्तर पोस्ट कर सकता है?

+0

धन्यवाद जेरेमी। मैं PHP5 का उपयोग कर रहा हूँ। कारण मैं इसे इस तरह से कर रहा हूं क्योंकि मुझे multi_curl के साथ समानांतर अनुरोध करने की आवश्यकता है। मैंने आपके द्वारा सुझाए गए प्रयासों की कोशिश की लेकिन अब यह झूठी वापसी कर रहा है। – Joe

+0

हाय जो, मेरा आखिरी संपादन भूल जाओ। मैंने सोचा कि मैं एक कोड संपादक खुला दरार और इस कोशिश करेंगे लेकिन इस मुद्दे को मैं आ रही हैं कि मैं simplexml_load_string नहीं मिल सकता है() प्रतिक्रिया स्ट्रिंग पार्स करने में है। यह सिर्फ एक खाली SimpleXML ऑब्जेक्ट देता है। मैं कोशिश करता रहूंगा और अगर मुझे जवाब मिल जाए तो वापस पोस्ट करेंगे। – Jeremy

+0

आपकी मदद जेरेमी के लिए धन्यवाद। मैं ऊपर दिए गए कोड के साथ गड़बड़ करने की कोशिश करूंगा और देख सकता हूं कि मैं इसे काम पर ला सकता हूं या नहीं। – Joe

5

पीएचपी एक सोप ग्राहक है कि यह तो आप मैन्युअल रूप से सोप XML को पार्स करने की जरूरत नहीं है बनाना चाहिए साथ आता है:

$xml = simplexml_load_string($response); 
$xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/'); 
foreach ($xml->xpath('//oproduct') as $item) 
{ 
    // do something 
} 

यहाँ प्रतिक्रिया है:

यहाँ मेरी कोड है। यहां देखें: http://php.net/manual/en/book.soap.php

संपादित करें: स्पष्टता के लिए, एसओएपी क्लाइंट PHP का हिस्सा नहीं बल्कि एक एक्सटेंशन है।

+0

यह सही है, PHP5 से शुरू हो रहा है। – brendan

+0

क्षमा करें दोस्तों, मुझे और अधिक स्पष्ट होना चाहिए था। मैं इस तरह से कर रहा हूं क्योंकि मुझे multi_curl का उपयोग करने की आवश्यकता है ताकि मैं समांतर अनुरोध कर सकूं। – Joe

+1

क्या साबुन प्रतिक्रिया का विश्लेषण करने के लिए साबुन क्लाइंट का उपयोग करने का कोई तरीका है? जवाब देने के लिए – Joe

संबंधित मुद्दे