2010-07-17 91 views
0

我试图自动化我的亚马逊订单处理。目前,我正在使用Amazon Merchant Transport获取订单的XML文件,但最终,我希望将带有Web服务的XML文件直接发送到我的卖家中央帐户。php亚马逊xml订单处理

与亚马逊订购信息部分阵列 -

Array 
(
... 
     [37] => Array 
     (
      [tag] => NAME 
      [type] => complete 
      [level] => 6 
      [value] => John Smith 
     ) 
... 
    [39] => Array 
     (
      [tag] => ADDRESSFIELDONE 
      [type] => complete 
      [level] => 6 
      [value] => 100 N MAIN St. 
     ) 
... 
    [41] => Array 
     (
      [tag] => CITY 
      [type] => complete 
      [level] => 6 
      [value] => PLANO 
     ) 
... 
    [43] => Array 
     (
      [tag] => STATEORREGION 
      [type] => complete 
      [level] => 6 
      [value] => TX 
     ) 
... 
    [45] => Array 
     (
      [tag] => POSTALCODE 
      [type] => complete 
      [level] => 6 
      [value] => 75075-1948 
     ) 

) 

我能找回我的订单为XML文档,可以用下面的代码解析。

$contents = file_get_contents("amzn-order-sample.xml"); 
$p = xml_parser_create(); 
xml_parse_into_struct($p, $contents, $vals, $index); 
xml_parser_free($p); 

现在我试图拔出订单相关的信息 - 首先是一个时间信息(发货人姓名,地址)

话,我希望能够得到“有序的项目/数量”信息,这可能是这个客户的1->很多项目。

,我已经工作

示例代码 - 检索值(我将投入到另一个阵列进行进一步处理)(很丑)

$arrIt = new RecursiveIteratorIterator(new RecursiveArrayIterator($vals)); 

// shipper name 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'NAME') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper Name\n"; 
    print_r($outputArray); 
    } 
} 

// shipper phone 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'BUYERPHONENUMBER') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper Phone\n"; 
    print_r($outputArray); 
    } 
} 

// shipper addresslineone 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'ADDRESSFIELDONE') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper Address\n"; 
    print_r($outputArray); 
    } 
} 

// shipper city 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'CITY') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper City\n"; 
    print_r($outputArray); 
    } 
} 

// shipper state 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'STATEORREGION') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper State\n"; 
    print_r($outputArray); 
    } 
} 

// shipper zip 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'POSTALCODE') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper Zip\n"; 
    print_r($outputArray); 
    } 
} 
// items 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'POSTALCODE') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper Zip\n"; 
    print_r($outputArray); 
    } 
} 

我要分析每1-许多项目与上面的代码一起循环排序,但必须有更好,更干净的方式.. - 也许有人有他们可以提供的代码片段。

在此先感谢您的任何想法..

一个新手到PHP

一定有很多更好的方法可以做到这类型的代码中使用XML和PHP(这将在Linux服务器上进行处理) - 任何建议或其他想法都非常受欢迎

+0

有人可以包裹他的代码吗? – quantumSoup 2010-07-17 01:06:02

+0

格式化固定。 – 2010-07-17 01:11:04

+0

这么多的代码,很少格式化。 @newbiephper请使用格式选项引用此代码,以便它清晰易读。谢谢@Thomas Owens – 2010-07-17 01:11:31

回答

0

您只需要一个foreach循环,因为每个人都在做同样的事情,但寻找不同的信息。

喜欢的东西:

foreach ($order_info_array as $sub) 
{ 
    switch ($sub['tag']) 
    { 
     case 'NAME': 
      echo "Shipper name\n"; 
      break; 
     case 'BUYERPHONENUMBER': 
      echo "Shipper Phone\n"; 
      break; 
    } 

    echo $sub['value']; 
} 

在switch语句中手动输入请看:http://php.net/manual/en/control-structures.switch.php

注意,在情况下,它并不明显。 $ order_info_array是你发布的海量数组的完整版本。

+0

非常感谢 - 这是我想了解的信息,并在我的数组示例中搜索 – user394407 2010-07-17 16:03:56

+0

@newbiephper你很受欢迎。您应该通过点击旁边的复选标记来接受答案。我还建议阅读常见问题,以了解如何使用stackoverflow功能。 – 2010-07-17 22:51:44