How to parse value `@attribute` from a SimpleXMLObject in PHP

↘锁芯ラ 提交于 2019-12-12 05:12:35

问题


I am trying to parse the starkoverflow.com/feeds/tag/{$tagName}. This is my code:

<?php
    $xml = file_get_contents("http://stackoverflow.com/feeds/tag/php");
    $simpleXml = simplexml_load_string($xml);
    $attr = $simpleXml->entry->category->@attributes;

?>

When I execute the above code it gives me a error, 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

So, My question is how to get the array of the @attributes?

Scrrenshot


回答1:


You use the appropriately documented method: attributes()

$attr = $simpleXml->entry->category->attributes();

Except that $simpleXml->entry->category is an array, so you need to specify which entry in the array you want to access:

$attr = $simpleXml->entry->category[0]->attributes();

EDIT

Unless, as I have just learned, you only need to reference the first element




回答2:


The key is, to realise there is no spoon array.

To get all the attributes as an array, you can use the attributes() method:

$all_attributes = $simpleXml->entry->category->attributes();

However, most of the time, what you really want is a particular attribute, in which case you just use array key notation:

$id_attribute = $simpleXml->entry->category['id'];

Note that this returns an object; when passing it around, you generally want to have just the string representing its value:

$id_value = (string)$simpleXml->entry->category['id'];

The above will assume you always want the first <category> element in the first <entry>, even if there are multiple. It is actually short-hand for specifying the 0th item (which works even if there is only one of each element):

$id_value = (string)$simpleXml->entry[0]->category[0]['id'];

Or, of course, looping over each set (again, it doesn't matter if there are one or multiple, the foreach will still work):

foreach ( $simpleXml->entry as $entry ) {
    foreach ( $entry->category as $category ) {
        $id_value_for_this_category = (string)$category['id'];
    }
}


来源:https://stackoverflow.com/questions/30666196/how-to-parse-value-attribute-from-a-simplexmlobject-in-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!