SimpleXMLElement::attributes
(PHP 5, PHP 7, PHP 8)
SimpleXMLElement::attributes — Identifies an element's attributes
说明
   public SimpleXMLElement::attributes(?string 
  $namespaceOrPrefix = null, bool $isPrefix = false): ?SimpleXMLElementThis function provides the attributes and values defined within an xml tag.
注意: SimpleXML 建起了一个给大多数方法添加迭代属性的规则。不能通过使用 var_dump() 或任何可检查对象的其它东西来查看。
返回值
Returns a SimpleXMLElement object that can be iterated over to loop through the attributes on the tag.
   Returns null if called on a SimpleXMLElement
   object that already represents an attribute and not a tag.
  
示例
示例 #1 Interpret an XML string
<?php
$string = <<<XML
<a>
 <foo name="one" game="lonely">1</foo>
</a>
XML;
$xml = simplexml_load_string($string);
foreach($xml->foo[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}
?>以上示例会输出:
name="one" game="lonely"
  +添加备注
  
用户贡献的备注 6 notes
  
  
  Xeoncross ¶
  
 
  14 years ago
  It is really simple to access attributes using array form. However, you must convert them to strings or ints if you plan on passing the values to functions.
<?php
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [id] => 55555
)
    [text] => "hello world"
)
?>
Then using a function
<?php
function xml_attribute($object, $attribute)
{
    if(isset($object[$attribute]))
        return (string) $object[$attribute];
}
?>
I can get the "id" like this
<?php
print xml_attribute($xml, 'id'); //prints "55555"
?>  
  
  chris at chlab dot ch ¶
  
 
  12 years ago
  Note that you must provide the namespace if you want to access an attribute of a non-default namespace:
Consider the following example:
<?php
$xml = <<<XML
<?xml version="1.0"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
 <Table Foo="Bar" ss:ExpandedColumnCount="7">
 </Table>
</Workbook>
XML;
$sxml = new SimpleXMLElement($xml);
/**
 * Access attribute of default namespace
 */
var_dump((string) $sxml->Table[0]['Foo']);
// outputs: 'Bar'
/**
 * Access attribute of non-default namespace
 */
var_dump((int) $sxml->Table[0]['ExpandedColumnCount']);
// outputs: 0
var_dump((int) $sxml->Table[0]->attributes('ss', TRUE)->ExpandedColumnCount);
// outputs: '7'
?>  
  
  sarlak ¶
  
 
  13 years ago
  <?php
$att = 'attribueName';
// You can access an element's attribute just like this :
$attribute = $element->attributes()->$att;
// This will save the value of the attribute, and not the objet
$attribute = (string)$element->attributes()->$att;
// You also can edit it this way :
$element->attributes()->$att = 'New value of the attribute';
?>  
  
  totalwipeout at gmail dot com ¶
  
 
  12 years ago
  Tip to get a real array of all attributes of a node (not SimpleXML's object acting like an array)
<?php
//- $node is a SimpleXMLElement object
$atts_object = $node->attributes(); //- get all attributes, this is not a real array
$atts_array = (array) $atts_object; //- typecast to an array
//- grab the value of '@attributes' key, which contains the array your after
$atts_array = $atts_array['@attributes'];
var_dump($atts_object); //- outputs object(SimpleXMLElement)[19]
                        //-             public '@attributes' => ...
var_dump($atts_array); //- outputs array (size=11) ...
?>
Hope this helps!  
  
  andy dot locologic+101 at gmail dot com ¶
  
 
  9 years ago
  Easiest and safest way to get attributes as an array is to use the iterator_to_array function (see http://php.net/manual/en/function.iterator-to-array.php):
<?php
      $x = new SimpleXMLElement('<div class="myclass" id="myid"/>');
$attributes = iterator_to_array($x->attributes());
?>  
  
  webfelipemaia at gmail dot com ¶
  
 
11 years ago
  Use attributes to display when it meets certain condition defined attribute / value in xml tags.
Use atributos para exibir quando atende determinada condição definida atributo / valor em tags XML.
Consider the following example:
Considere o seguinte exemplo:
(file.xml)
<?xml version="1.0" encoding="UTF-8"?>
<list>
    <item type="Language">
        <name>PHP</name>
        <link>www.php.net</link>
    </item>
    <item type="Database">
        <name>Java</name>
        <link>www.oracle.com/br/technologies/java/</link>
    </item>
</list>
Checks if the attribute value equals "Language", if equal prints everything that is related to "Language".
Verifica se o valor do atributo é igual a "Language", se for, imprime tudo o que for relativo ao mesmo.
<?php
$xml = simplexml_load_file("file.xml");
foreach($xml->children() as $child) {
$role = $child->attributes();
        foreach($child as $key => $value) {
            if($role == "Language")
            echo("[".$key ."] ".$value . "<br />");
        }
}
?>
output:
saída:
[name] PHP
[link] www.php.net备份地址:http://www.lvesu.com/blog/php/simplexmlelement.attributes.php