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[],那么我会看到 28 个元素,每个元素有 3 个子元素(属性、MailService 和 Rate)。

我究竟做错了什么?

这是帮助查看数据的图片 在此处输入图像描述

在此处输入图像描述

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 回答