XML未通过simplexml_load_string()正确转换为对象

use*_*594 1 php xml parsing object amazon-mws

我试图通过simplexml_load_string()从PHP中解析来自Amazon API的XML响应.

我得到的XML看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<GetMatchingProductForIdResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
   <GetMatchingProductForIdResult Id="xxx" IdType="SellerSKU" status="Success">
      <Products>
         <Product>
            <Identifiers>
               <MarketplaceASIN>
                  <MarketplaceId>xxxx</MarketplaceId>
                  <ASIN>xxx</ASIN>
               </MarketplaceASIN>
            </Identifiers>
            <AttributeSets>
               <ns2:ItemAttributes xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd" xml:lang="de-DE">
                  <ns2:Binding>Elektronik</ns2:Binding>
                  <ns2:Brand>Panasonic</ns2:Brand>
                  <ns2:Feature>xx</ns2:Feature>
                  <ns2:Feature>xxx</ns2:Feature>
                  <ns2:Feature>xxx</ns2:Feature>
                  <ns2:Feature>xxx</ns2:Feature>
                  <ns2:Feature>xxx</ns2:Feature>
                  <ns2:Label>Panasonic</ns2:Label>
                  <ns2:Manufacturer>Panasonic</ns2:Manufacturer>
                  <ns2:PackageDimensions>
                     <ns2:Height Units="inches">xx</ns2:Height>
                     <ns2:Length Units="inches">xx</ns2:Length>
                     <ns2:Width Units="inches">xxx</ns2:Width>
                  </ns2:PackageDimensions>
                  <ns2:PartNumber>xxx</ns2:PartNumber>
                  <ns2:ProductGroup>Computer &amp; Zubehör</ns2:ProductGroup>
                  <ns2:ProductTypeName>COMPUTER_COMPONENT</ns2:ProductTypeName>
                  <ns2:Publisher>Panasonic</ns2:Publisher>
                  <ns2:SmallImage>
                     <ns2:URL>xxx.jpg</ns2:URL>
                     <ns2:Height Units="pixels">xx</ns2:Height>
                     <ns2:Width Units="pixels">xx</ns2:Width>
                  </ns2:SmallImage>
                  <ns2:Studio>Panasonic</ns2:Studio>
                  <ns2:Title>xxx</ns2:Title>
               </ns2:ItemAttributes>
            </AttributeSets>
            <Relationships />
            <SalesRankings />
         </Product>
      </Products>
   </GetMatchingProductForIdResult>
   <ResponseMetadata>
      <RequestId>xx</RequestId>
   </ResponseMetadata>
</GetMatchingProductForIdResponse>    
Run Code Online (Sandbox Code Playgroud)

我的PHP代码:

$response = $service->GetMatchingProductForId($request);  //making the call
$response = $response->toXML();
$response = simplexml_load_string($response);       
var_dump($response);     
Run Code Online (Sandbox Code Playgroud)

遗憾的是,如var_dump中所示,AttributeSets不会转换为对象.

object(SimpleXMLElement)#9 (2) {
  ["GetMatchingProductForIdResult"]=>
  object(SimpleXMLElement)#4 (2) {
    ["@attributes"]=>
    array(3) {
      ["Id"]=>
      string(5) "xxx"
      ["IdType"]=>
      string(9) "SellerSKU"
      ["status"]=>
      string(7) "Success"
    }
    ["Products"]=>
    object(SimpleXMLElement)#14 (1) {
      ["Product"]=>
      object(SimpleXMLElement)#18 (4) {
        ["Identifiers"]=>
        object(SimpleXMLElement)#23 (1) {
          ["MarketplaceASIN"]=>
          object(SimpleXMLElement)#29 (2) {
            ["MarketplaceId"]=>
            string(14) "xxx"
            ["ASIN"]=>
            string(10) "xxxx"
          }
        }
        ["AttributeSets"]=>
        object(SimpleXMLElement)#37 (0) {
        }
        ["Relationships"]=>
        object(SimpleXMLElement)#28 (0) {
        }
        ["SalesRankings"]=>
        object(SimpleXMLElement)#26 (0) {
        }
      }
    }
  }
  ["ResponseMetadata"]=>
  object(SimpleXMLElement)#12 (1) {
    ["RequestId"]=>
    string(36) "xxx"
  }
}
Run Code Online (Sandbox Code Playgroud)

XML有问题吗?

use*_*594 5

坚持这个,只是使用钝力,它工作得很好.

$response = str_replace("ns2:","",$response);
Run Code Online (Sandbox Code Playgroud)

  • 这比我的回答好。 (2认同)