使用 simplexml_load_string 获取 xml 属性 [重复]

Posted

技术标签:

【中文标题】使用 simplexml_load_string 获取 xml 属性 [重复]【英文标题】:Get xml attribute using simplexml_load_string [duplicate] 【发布时间】:2012-12-30 20:17:44 【问题描述】:

可能重复:Accessing @attribute from SimpleXML

我正在使用一些第三方 API,它们通过以下形式的 xml 返回错误:

<xml>
<status>0</status>
<error code="111">Error message text goes here.</error>
</xml>

php 中使用 simplexml_load_string 可以轻松获取状态 0 和错误消息文本,但我找不到从 &lt;error code="111"&gt; 检索 code="111" 值的方法。它似乎被 SimpleXML 丢弃了。

<?php
    $bytesRead = file_get_contents('http://api.....');
    $xml = simplexml_load_string($bytesRead);

    echo '<pre>'; print_r($xml); echo '</pre>';
?>

输出

SimpleXMLElement Object
(
    [status] => 0
    [error] => Error message text goes here.
)

我错过了什么吗?有没有办法获得这个值,或者有人可以建议另一种方法来获得这个值吗?

【问题讨论】:

【参考方案1】:

它在那里,但没有显示在print_r 输出中。赞the basic examples page coins it in Example #5 Using attributes

到目前为止,我们只介绍了读取元素名称及其值的工作。 SimpleXML 还可以访问元素属性。像访问 array 的元素一样访问元素的属性。

例子:

$x = '<xml>
<status>0</status>
<error code="111">Error message text goes here.</error>
</xml>';

$attributeObject = simplexml_load_string($x)->error['code'];

print_r($attributeObject);
print_r((string) $attributeObject);

程序输出 (Demo)

SimpleXMLElement Object
(
    [0] => 111
)
111

【讨论】:

救了命! ..... 如果出现`[@attributes],请使用$obj-&gt;attributes()-&gt;status【参考方案2】:

就这样使用 echo $xml->error['code'];

例如: http://codepad.org/uOqeBNz9

【讨论】:

以上是关于使用 simplexml_load_string 获取 xml 属性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 simplexml_load_string 读取 XML 文件

simplexml_load_string 抛出“未注册的错误消息”

PHP - 使用 simplexml_load_string 解析 XML - 使用 CDATA 获取空值? [复制]

错误:“输入不是正确的 UTF-8,表示编码!”使用 PHP 的 simplexml_load_string

[PHP] xml转对象函数simplexml_load_string

Simplexml_load_string() 无法解析错误