我正在尝试使用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
答案 0 :(得分: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,则必须循环遍历属性(),如下所示:
foreach ($user[0]->attributes() as $attr_name => $attr_value) {
if ($attr_name == 'email') {
var_dump($attr_name, (string)$attr_value);
}
}
您也可以在该变量上分配->attributes()
的返回值并使用['email']
。如果您事先不知道属性名称,循环也很有用。
答案 1 :(得分: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