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