【问题标题】:Retrieve a value from a SimpleXML object从 SimpleXML 对象中检索值
【发布时间】:2013-03-14 00:31:07
【问题描述】:

对不起,我问了这样一个“菜鸟”的问题,但在过去的几个小时里,我一直在尝试找到一个简单的例子来说明如何遍历我返回的 xml,但我无处可去。我只是希望能够循环浏览 xml 并为每个订单提取“金额”属性和“AmazonOrderId”属性。不知道怎么循环,也不知道怎么抓取相关数据。

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] => 5qhs64ktb88pdsj@marketplace.amazon.com
                                    [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] => 6kfc88nrsnm83fq@marketplace.amazon.com
                                    [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
                                )
...

【问题讨论】:

  • 你知道如何使用SimpleXML,但不知道如何循环?那是没有意义的。我会给你一个提示。您感兴趣的数组可以通过$object->ListOrdersResult->Orders->Order 访问,其中$object 是您执行var_dump 的主要SimpleXML 对象。
  • 而不是print_r 使用$xml->asXML('php://stdout');,美化输出,然后您通常会看到如何访问该元素。如果您仍然不确定,已经回答了很多类似的问题。

标签: php xml parsing simplexml


【解决方案1】:

SimpleXML 很棒,不是吗?

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

我使用(string) 类型转换,因为否则你会为那些标量值返回SimpleXMLElements。

【讨论】:

    【解决方案2】:

    拉取每个订单的“金额”属性和“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

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多