亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何在 php 中讀取 Folloing Soap 響應

我如何在 php 中讀取 Folloing Soap 響應

PHP
繁星點點滴滴 2022-01-24 10:12:29
<?php$xml ='<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://www.promostandards.org/WSDL/ProductDataService/1.0.0/SharedObjects/" xmlns:ns2="http://www.promostandards.org/WSDL/ProductDataService/1.0.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">    <env:Body>        <ns2:GetProductResponse>            <ns2:Product>                <ns1:productId>1322059</ns1:productId>                <ns2:productName>Smart WiFi Security Camera</ns2:productName>                <ns2:productBrand>AAkron Line</ns2:productBrand>                <ns2:export>false</ns2:export>                <ns2:ProductCategoryArray>                    <ns2:ProductCategory>                        <ns2:category>Cameras, Safety, Health Care, Insurance, Finance, Tech Industry, NEW for 2018, New for 2019</ns2:category>                        <ns2:subCategory>N/A</ns2:subCategory>                    </ns2:ProductCategory>                </ns2:ProductCategoryArray>            </ns2:Product>        </ns2:GetProductResponse>    </env:Body></env:Envelope>';//header("Content-type: text/xml");//echo $xml;$data_xml = simplexml_load_string($xml);print_r($data_xml);?>我已經嘗試了其他參考資料中的所有內容,但沒有任何效果。它輸出一個空數組。
查看完整描述

3 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

如果您使用DOMDocument并且DOMXPath可以使用 XPath 查詢從 XML 中找到您需要的信息。


$xml ='<?xml version="1.0" encoding="UTF-8"?>

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://www.promostandards.org/WSDL/ProductDataService/1.0.0/SharedObjects/" xmlns:ns2="http://www.promostandards.org/WSDL/ProductDataService/1.0.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <env:Body>

        <ns2:GetProductResponse>

            <ns2:Product>

                <ns1:productId>1322059</ns1:productId>

                <ns2:productName>Smart WiFi Security Camera</ns2:productName>

                <ns2:productBrand>AAkron Line</ns2:productBrand>

                <ns2:export>false</ns2:export>

                <ns2:ProductCategoryArray>

                    <ns2:ProductCategory>

                        <ns2:category>Cameras, Safety, Health Care, Insurance, Finance, Tech Industry, NEW for 2018, New for 2019</ns2:category>

                        <ns2:subCategory>N/A</ns2:subCategory>

                    </ns2:ProductCategory>

                </ns2:ProductCategoryArray>

            </ns2:Product>

        </ns2:GetProductResponse>

    </env:Body>

</env:Envelope>';



$dom=new DOMDocument;

$dom->loadXML( $xml );



$xp=new DOMXPath( $dom );

$xp->registerNamespace('ns1','http://www.promostandards.org/WSDL/ProductDataService/1.0.0/SharedObjects/');

$xp->registerNamespace('ns2','http://www.promostandards.org/WSDL/ProductDataService/1.0.0/');

$xp->registerNamespace('xsi','http://www.w3.org/2001/XMLSchema-instance');

$xp->registerNamespace('env','http://www.w3.org/2003/05/soap-envelope');



$products=$xp->query('//ns2:Product');


if( $products->length > 0 ){

    foreach( $products as $product ){

        $id=$xp->query( 'ns1:productId', $product )->item(0)->nodeValue;

        $name=$xp->query( 'ns2:productName', $product )->item(0)->nodeValue;

        $brand=$xp->query( 'ns2:productBrand', $product )->item(0)->nodeValue;

        $export=$xp->query( 'ns2:export', $product )->item(0)->nodeValue;

        $category=$xp->query( 'ns2:ProductCategoryArray/ns2:ProductCategory/ns2:category', $product )->item(0)->nodeValue;

        $subcategory=$xp->query( 'ns2:ProductCategoryArray/ns2:ProductCategory/ns2:subCategory', $product )->item(0)->nodeValue;



        echo $id, $name, $brand, $category, $subcategory;

    }

}

輸出:


1322059Smart WiFi Security CameraAAkron LineCameras, Safety, Health Care, Insurance, Finance, Tech Industry, NEW for 2018, New for 2019N/A



查看完整回答
反對 回復 2022-01-24
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

您還可以使用 SimpleXML 和Xpath。


function getNsValue($xml, $path, $index = 0){

  return (string)$xml->xpath($path)[$index];

}

xml測試數據:


$xml ='<?xml version="1.0" encoding="UTF-8"?>

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://www.promostandards.org/WSDL/ProductDataService/1.0.0/SharedObjects/" xmlns:ns2="http://www.promostandards.org/WSDL/ProductDataService/1.0.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <env:Body>

        <ns2:GetProductResponse>

            <ns2:Product>

                <ns1:productId>1322059</ns1:productId>

                <ns2:productName>Smart WiFi Security Camera</ns2:productName>

                <ns2:productBrand>AAkron Line</ns2:productBrand>

                <ns2:export>false</ns2:export>

                <ns2:ProductCategoryArray>

                    <ns2:ProductCategory>

                        <ns2:category>Cameras, Safety, Health Care, Insurance, Finance, Tech Industry, NEW for 2018, New for 2019</ns2:category>

                        <ns2:subCategory>N/A</ns2:subCategory>

                    </ns2:ProductCategory>

                </ns2:ProductCategoryArray>

            </ns2:Product>

        </ns2:GetProductResponse>

    </env:Body>

</env:Envelope>';


$data_xml = simplexml_load_string($xml);

例子:


$category = getNsValue($data_xml,'//ns2:category');


$productId = getNsValue($data_xml,'//ns1:productId');


var_dump($category, $productId);

/*

string(91) "Cameras, Safety, Health Care, Insurance, Finance, Tech Industry, NEW for 2018, New for 2019"

string(7) "1322059"

*/    


查看完整回答
反對 回復 2022-01-24
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

我已經使用以下代碼解決了我的問題-

$response = file_get_contents($xml);

$res=simplexml_load_string($response);

print_r($res);


查看完整回答
反對 回復 2022-01-24
  • 3 回答
  • 0 關注
  • 181 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號