2

私も必要なので、SimpleXMLを機能させることができません。要素から連想配列を作成したい。xmlは次のようになります

<?xml version="1.0"?>
<RateV4Response>
<Package ID="1">
<ZipOrigination>11901</ZipOrigination>
<ZipDestination>91730</ZipDestination>
<Pounds>0</Pounds>
<Ounces>3.5</Ounces>
<Size>REGULAR</Size>
<Machinable>TRUE</Machinable>
<Zone>8</Zone>

<Postage CLASSID="3">
    <MailService>Express Mail</MailService>
    <Rate>28.00</Rate>
</Postage>
<Postage CLASSID="2">
    <MailService>Express Mail Hold For Pickup</MailService>
    <Rate>28.00</Rate>
</Postage>

MailService と Rate は配列でなければなりません。これは私のphpです:

$usps_response = new SimpleXMLElement($result);
foreach($usps_response->Package->Postage as $service)
    $data[] = array($service->MailService => $service->Rate);

ここではエラーは表示されませんが、$data は 28 個の空の要素です。私もこれを試しました:

$data[] = array($service['MailService'] => $service['Rate']);

しかし、それは役に立ちませんでした

$service だけを $data[] に割り当てると、それぞれ 3 つのサブ要素 (属性、MailService、Rate) を持つ 28 の要素が表示されます。

私は何を間違っていますか?

データを確認するのに役立つ写真を次に示します ここに画像の説明を入力

ここに画像の説明を入力

4

2 に答える 2

1

ここに投稿されたXMLは有効なXMLではないため、不完全であるか、郵便サービスがあまり役に立たないものを生成したと想定する必要があります。いくつかの変更を加えることで、それを機能させることができました。http://www.laprbass.com/RAY_temp_user193.phpを参照して ください

<?php // RAY_temp_user193.php
error_reporting(E_ALL);
echo '<pre>';

// TEST DATA
$xml = <<<ENDXML
<?xml version="1.0"?>
<RateV4Response>
<Package ID="1">
<ZipOrigination>11901</ZipOrigination>
<ZipDestination>91730</ZipDestination>
<Pounds>0</Pounds>
<Ounces>3.5</Ounces>
<Size>REGULAR</Size>
<Machinable>TRUE</Machinable>
<Zone>8</Zone>

<Postage CLASSID="3">
    <MailService>Express Mail</MailService>
    <Rate>28.00</Rate>
</Postage>
<Postage CLASSID="2">
    <MailService>Express Mail Hold For Pickup</MailService>
    <Rate>28.00</Rate>
</Postage>
</Package>
</RateV4Response>
ENDXML;

// MAKE AN OBJECT
$obj = SimpleXML_Load_String($xml);
var_dump($obj);

では、このオブジェクトをどうしますか?

于 2013-01-02T01:42:50.853 に答える
0

配列のようなキーが必要なのは奇妙に思えExpress Mail Hold For Pickupますが、ここに行きます:

foreach($usps_response->Package->Postage as $service)
    $data[] = array((string)$service->MailService => (string)$service->Rate);
于 2013-01-02T02:55:02.343 に答える