php 如何将XML响应从curl转换为json [duplicate]

l7wslrjt  于 2023-01-24  发布在  PHP
关注(0)|答案(1)|浏览(155)
    • 此问题在此处已有答案**:

Reference - How do I handle Namespaces (Tags and Attributes with a Colon in their Name) in SimpleXML?(2个答案)
关闭3个月前.

$response = curl_exec($ch);
curl_close($ch);
dd($response);

其类型为响应字符串。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
        <ns3:GetProductListResponse xmlns:ns3="http://xxx1">
            <result>
                <status>success</status>
            </result>
            <products>
                <product>
                    <currencyAmount>900.00</currencyAmount>
                    <currencyType>1</currencyType>
                    <displayPrice>900.00</displayPrice>
                    <isDomestic>false</isDomestic>
                    <id>557830715</id>
                    <price>900.00</price>
                    <productSellerCode>TSRT7777</productSellerCode>
                    <approvalStatus>6</approvalStatus>
                    ...

为了将此数据转换为xml,我使用了simplexml_load_string()

$response = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($response);
dd($xml);

而输出是这样的。

^ SimpleXMLElement {#435}

我在试着获取里面的数据然后试试这个。

$status = (string)$xml->result->status;
dd($status);

退货:

^ ""

我尝试使用simplexml_load_file(),但没有结果。我的主要目标是将此数据作为json获取,但我无法做到这一点,因为我无法读取值。任何帮助都将是伟大的。提前感谢。
在@Jacob Mulquin的建议之后,我使用了:

if ($xml === false) {
        dump("b");
        foreach (libxml_get_errors() as $error) {
            dump($error->message);
        }

        dd("a");
    } else {
        dd("c");
    }

退回:"c"

5kgi1eie

5kgi1eie1#

由于各种原因,您的示例xml格式不正确,但是假设实际的$response是格式正确的xml字符串,下面的代码应该可以满足您的需要:

#first you need to deal with namespaces
$xml->registerXPathNamespace("ns3", "http://xxx1");

#then use xpath to select your target element
$status = $xml->xpath('//ns3:GetProductListResponse//status')[0];
echo $status;

输出应为

success

相关问题