php亚马逊xml订单处理

时间:2010-07-17 01:04:17

标签: php xml arrays

我正在尝试自动化我的亚马逊订单处理。目前我正在使用Amazon Merchant Transport获取订单的XML文件,但最终,我希望将带有Web服务的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-many项目,但必须有更好,更清晰的方式...... - 也许某人有他们可以提供的代码片段。

提前感谢任何想法..

PHP的新手

必须有许多更好的方法来在XML和PHP中执行此类代码(这将在Linux服务器上处理) - 非常欢迎任何建议或其他想法

1 个答案:

答案 0 :(得分: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是您发布的大量数组的完整版本。