【问题标题】:new to xml: Get children data into php variablexml 新手:将子数据放入 php 变量中
【发布时间】:2013-02-15 14:12:42
【问题描述】:

我的确认表单需要一个简单而精益的解决方案。我从服务器 XML 响应中检索联系人电子邮件地址。如下:

<users>
<User LoginName="test1" Owner="" Alias="" UserType="PAID" ClientType="OBM" 
Quota="10737418240" Timezone="GMT+08:00 (CST)" Language="en" DataFile="1" 
DataSize="1536" RetainFile="0" RetainSize="0" EnableMSSQL="Y" EnableMSExchange="Y"
EnableOracle="Y" EnableLotusNotes="Y" EnableLotusDomino="Y" EnableMySQL="Y" 
EnableInFileDelta="Y" EnableShadowCopy="Y" EnableExchangeMailbox="N" 
ExchangeMailboxQuota="0" EnableNASClient="Y" EnableDeltaMerge="Y" EnableMsVm="N" 
MsVmQuota="0" EnableVMware="N" VMwareQuota="0" Bandwidth="0" Notes="" 
Status="ENABLE" RegistrationDate="1302687743242" SuspendPaidUser="N" 
SuspendPaidUserDate="20140503" LastBackupDate="1302699594652" EnableCDP="Y" 
EnableShadowProtectBareMetal="Y" EnableWinServer2008BareMetal="Y" 
Hostname="123.abc.com">
<Contact Name=""Email="www@qqq.com"/>
</user> 
…
</users>

我得到了以下结果:

object(SimpleXMLElement)#7 (1) { [0]=> string(6) "Company" } 
object(SimpleXMLElement)#8 (1) { [0]=> string(26) "email@address.ext" }

现在我需要将它们放入变量中。我似乎无法完成这一点。我的代码到这里:

    $request = "http://$SERVER/obs/api/GetUser.do?
    SysUser=$SYSUSER&SysPwd=$SYSPWD&LoginName=$logonname";
    // Execute the API Call and place the XML output in an Array variable
    $response = simplexml_load_file($request);
    // Retrieve the LoginName attribute from the Array
    foreach($response->children() as $child) {   
        foreach($child->attributes() as $data) {
            echo var_dump($data);
        }
     }

任何新手的帮助都会受到欢迎。谢谢

弗兰克

【问题讨论】:

  • 你显然已经拿到 SimpleXMLElement 持有电子邮件,那么到底是什么问题?如何从中取出电子邮件字符串? $email = (string) $emailElement;
  • echo var_dump 是多余的。 var_dump 已经默认输出了。

标签: php xml-parsing


【解决方案1】:

这是一个从 XML 中读取姓名和电子邮件的简单示例:

$response = simplexml_load_file($request);

foreach($response->User as $user)
{
    foreach($user->Contact as $contact)
    {
        $name = $contact->attributes()->Name;
        $email = $contact->attributes()->Email;

        echo $name;
        echo $email;
    }
}

Demo

【讨论】:

  • 回显为空。我的回复包含:
  • @FrankSchuurman 检查 XML 中的大小写。您的开始用户标签是User,但结束是user。您需要在 PHP 代码中使用真实 XML 中的任何一种大小写 - 所以相应地进行更改。除此之外,上面的代码应该可以工作(参见演示)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2011-04-30
  • 1970-01-01
  • 2011-08-15
相关资源
最近更新 更多