簡體   English   中英

如何從 PHP Guzzle 請求獲取 XML 響應數據

[英]How to get data on an XML response from a PHP Guzzle requests

我有以下請求,正在使用 guzzle 來處理它。 我試圖在key => value數組中獲取IDNAME ,但它似乎不起作用。

$api_url = 'http://example.com/test.asmx/GetUserDetails?userID=123';
$client = new Client();
$results = $client->request('GET', $api_url)->getBody()->getContents();
dd($results);

當我echo $results時得到的響應如下所示

123EXAMPLE

此外,當我dd($results)出現在三重引號""" """時得到的響應如下所示

"""
<?xml version="1.0" encoding="utf-8"?>

<DataSet xmlns="http://example.com">

  <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="Table">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="ID" type="xs:string" minOccurs="0" />
                <xs:element name="NAME" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
    <NewDataSet xmlns="">
      <Table diffgr:id="Table1" msdata:rowOrder="0">
        <ID>123</ID>
        <NAME>EXAMPLE</NAME>
      </Table>
    </NewDataSet>
  </diffgr:diffgram>
</DataSet>
"""

我嘗試使用 SimpleXMLElement 但它導致了這個響應SimpleXMLElement {#642}

$response1 = simplexml_load_string($results);
$response2 = SimpleXMLElement($results);

另外,我使用了json_encodejson_decode但都沒有用。

請,任何幫助表示贊賞。

名稱空間似乎使情況復雜化。 這段代碼:

$response2 = new SimpleXMLElement($results);
$children = $response2->children('diffgr', true);
$children2 = $children->children();
echo $children2->NewDataSet->Table->ID;
echo PHP_EOL; //newline
echo $children2->NewDataSet->Table->NAME;

會給你數據。

它首先獲取具有“diffgr”命名空間(在本例中只有一個)的外部 XML 的所有子級。 然后在那個子元素中,它自己的子元素再次沒有命名空間,因此我們必須再次使用 children() 函數而不指定命名空間來檢索它們。

現場演示: http : //sandbox.onlinephpfunctions.com/code/3cd49767e5b1dd237d26b9f03ceff4dae0546eae

這個想法歸功於這篇文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM