我无法让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']);
但这没有帮助
如果我只为$ data []分配$ service,那么我会看到28个元素,每个元素包含3个子元素(属性,MailService和Rate)。
我做错了什么?
以下是帮助查看数据的图片
答案 0 :(得分: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);
现在你想对这个对象做什么?
答案 1 :(得分:0)
在你的阵列中你想要一个像Express Mail Hold For Pickup
这样的键似乎很奇怪但是我们走了:
foreach($usps_response->Package->Postage as $service)
$data[] = array((string)$service->MailService => (string)$service->Rate);