我正在尝试解析starkoverflow.com/feeds/tag/{$tagName}
。
这是我的代码:
<?php
$xml = file_get_contents("http://stackoverflow.com/feeds/tag/php");
$simpleXml = simplexml_load_string($xml);
$attr = $simpleXml->entry->category->@attributes;
?>
当我执行上面的代码时,它会给我一个错误Parse error: syntax error, unexpected '@', expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in D:\wamp\www\success\protoT.php on line 4
所以,我的问题是如何获得@attributes
的阵列?
Scrrenshot
答案 0 :(得分:2)
您使用appropriately documented method: attributes()
$attr = $simpleXml->entry->category->attributes();
除了$simpleXml->entry->category
是一个数组,因此您需要指定要访问的数组中的哪个条目:
$attr = $simpleXml->entry->category[0]->attributes();
修改强>
除非我刚学会,否则你只需要引用第一个元素
答案 1 :(得分:2)
关键是,要意识到没有 spoon 数组。
要将所有属性作为数组获取,可以使用attributes()
方法:
$all_attributes = $simpleXml->entry->category->attributes();
但是,大多数情况下,您真正想要的是一个特定属性,在这种情况下,您只需使用数组键表示法:
$id_attribute = $simpleXml->entry->category['id'];
请注意,这会返回一个对象;传递它时,通常只想要表示其值的字符串:
$id_value = (string)$simpleXml->entry->category['id'];
以上假设您始终希望首先 <category>
中的第一个 <entry>
元素,即使有多个元素。它实际上是指定第0项的简写(即使每个元素只有一个也能工作):
$id_value = (string)$simpleXml->entry[0]->category[0]['id'];
或者,当然,循环遍历每一组(同样,如果有一个或多个,无关紧要,foreach
仍然有效):
foreach ( $simpleXml->entry as $entry ) {
foreach ( $entry->category as $category ) {
$id_value_for_this_category = (string)$category['id'];
}
}