2013-03-14 87 views
0

不好意思问这样一个“noob”问题,但我一直在试图找到一个简单的例子,说明如何在过去的几个小时中循环返回的xml,并且我没有哪里。我只是希望能够循环访问xml并为每个订单提取'Amount'属性和'AmazonOrderId'属性。我不知道如何循环,也不知道如何获取相关数据。从SimpleXML对象中检索一个值

SimpleXMLElement Object 
(
    [ListOrdersResult] => SimpleXMLElement Object 
     (
      [Orders] => SimpleXMLElement Object 
       (
        [Order] => Array 
         (
          [0] => SimpleXMLElement Object 
           (
            [ShipmentServiceLevelCategory] => SecondDay 
            [OrderTotal] => SimpleXMLElement Object 
             (
              [Amount] => 5.93 
              [CurrencyCode] => USD 
             ) 

            [SellerOrderId] => 107-1261608-7067458 
            [FulfillmentChannel] => AFN 
            [BuyerEmail] => [email protected] 
            [OrderStatus] => Shipped 
            [BuyerName] => Derrick D Vann 
            [ShipServiceLevel] => SecondDay 
            [LastUpdateDate] => 2013-03-13T02:20:31Z 
            [PurchaseDate] => 2013-03-11T06:14:40Z 
            [NumberOfItemsUnshipped] => 0 
            [MarketplaceId] => ATVPDKIKX0DER 
            [SalesChannel] => Amazon.com 
            [ShippingAddress] => SimpleXMLElement Object 
             (
              [Phone] => 202 746-2567 
              [PostalCode] => 20001-4040 
              [Name] => Derrick Vann 
              [CountryCode] => US 
              [StateOrRegion] => DC 
              [AddressLine1] => 2120 Vermont Ave NW Apt 117 
              [City] => Washington 
             ) 

            [NumberOfItemsShipped] => 1 
            [AmazonOrderId] => 107-1261608-7067458 
            [PaymentMethod] => Other 
           ) 

          [1] => SimpleXMLElement Object 
           (
            [ShipmentServiceLevelCategory] => Expedited 
            [OrderTotal] => SimpleXMLElement Object 
             (
              [Amount] => 23.30 
              [CurrencyCode] => USD 
             ) 

            [SellerOrderId] => 104-9066827-4446667 
            [FulfillmentChannel] => AFN 
            [BuyerEmail] => [email protected] 
            [OrderStatus] => Shipped 
            [BuyerName] => Quoc Bui 
            [ShipServiceLevel] => Expedited 
            [LastUpdateDate] => 2013-03-13T09:34:26Z 
            [PurchaseDate] => 2013-03-11T08:07:13Z 
            [NumberOfItemsUnshipped] => 0 
            [MarketplaceId] => ATVPDKIKX0DER 
            [SalesChannel] => Amazon.com 
            [ShippingAddress] => SimpleXMLElement Object 
             (
              [Phone] => (02) 9560 3639 
              [PostalCode] => 2204 
              [Name] => Quoc Minh Bui 
              [CountryCode] => AU 
              [StateOrRegion] => New South Wales 
              [AddressLine1] => 19 Centennial St 
              [City] => Marrickville 
             ) 

            [NumberOfItemsShipped] => 1 
            [AmazonOrderId] => 104-9066827-4446667 
            [PaymentMethod] => Other 
           ) 
... 
+0

您知道如何使用SimpleXML,但不知道如何循环?这只是没有意义。我会给你一个提示。您可以在'$ object-> ListOrdersResult-> Orders-> Order'中访问您感兴趣的数组,其中'$ object'是您执行var_dump的主要SimpleXML对象。 – 2013-03-14 00:34:35

+0

而不是'print_r'使用'$ xml-> asXML('php:// stdout');',美化输出,然后你通常会看到如何访问元素。如果你还不确定,有很多类似的问题已经回答。 – hakre 2013-03-14 00:51:14

回答

3

SimpleXML很棒,不是吗?

foreach ($xml->ListOrdersResult->Orders->Order as $order) { 
    $amazonOrderId = (string) $order->AmazonOrderId; 
    $orderTotal = (string) $order->OrderTotal->Amount; 
} 

我用(string)型铸造,因为你会得到SimpleXMLElement S表示这些标值返回,否则。

0

为每个订单提取'金额'属性和'AmazonOrderId'属性。

如果我把你字的字,那么这就是你要找的内容:

$allThoseAttributes = $xml->xpath('//Order/@Amount|//Order/@AmazonOrderId'); 

然而,更多的可能是你正在寻找:

$orders = []; 
foreach ($xml->xpath('//Order') as $order) { 
    $orders[] = [ 
     'amazon' => (string) $order->AmazonOrderId 
     'total' => (string) $order->OrderTotal->Amount; 
    ]; 
} 

因为你所称的属性是事实上的元素。如果您想了解有关XML和Xpath的更多信息,请阅读以下内容:XPath