0

我正在尝试使用 php 处理几个 xml 文件。我已经阅读了 php simpleXML 网站上的解释和一些示例,但我无法从 xml 中获取我想要的内容。
我无法控制 xml。这是 xml 文件的片段:

<end-user-emails>
    <user email="test@testemails.com"/>
</end-user-emails>

我目前拥有的一段代码:

$result = $xml->xpath("end-user-emails/user[@email]");
print_r($result[0][email]);

哪个输出:

SimpleXMLElement Object ( [0] => test@testemails.com ) 

我找不到简单地返回属性值的方法。
我尝试将其转换为字符串并得到错误。我尝试了以下几种变体:

$result = $xml->end-user-emails[0]->user[0]->attributes();

它告诉我,尽管有先前的输出,但我不能调用 attributes() 因为它没有在对象上被调用。

因此,如果有人可以让我知道如何从 xml 中获取属性名称和值,将不胜感激。属性名称不是必需的,但我想使用它,所以我可以检查我是否真的在抓取电子邮件,例如:

if attributeName = "email" then $email = attributevalue
4

2 回答 2

2

attributes()方法将返回一个类似对象的数组,因此这应该可以满足您的要求,但仅适用于 php 5.4+

$str = '
<end-user-emails>
    <user email="test@testemails.com"/>
</end-user-emails>';
$xml = simplexml_load_string($str);
// grab users with email
$user = $xml->xpath('//end-user-emails/user[@email]');
// print the first one's email attribute
var_dump((string)$user[0]->attributes()['email']);

如果您使用的是 php5.3,则必须像这样遍历 attributes():

foreach ($user[0]->attributes() as $attr_name => $attr_value) {
    if ($attr_name == 'email') {
        var_dump($attr_name, (string)$attr_value);
    }
}

您也可以分配该变量的返回值->attributes()['email']在该变量上使用。如果您事先不知道属性名称,则循环也很有用。

于 2013-04-03T20:13:32.283 回答
1

要获取用户的电子邮件地址(在您的示例中),请将 xml 加载到一个对象中,然后解析每个项目。我希望这有帮助。

//load the data into a simple xml object
$xml = simplexml_load_file($file, null, LIBXML_NOCDATA);
//parse over the data and manipulate
foreach ($xml->action as $item) {
    $email = $item->end-user-emails['email'];
    echo $email;

}//end for

有关更多信息,请参阅http://php.net/manual/en/function.simplexml-load-file.php

于 2013-04-03T20:05:10.303 回答