SimpleXMLElement::attributes
(PHP 5 >= 5.0.1, PHP 7)
SimpleXMLElement::attributes — Возвращает атрибуты элемента
Описание
$ns
= NULL
[, bool $is_prefix
= false
]] )Эта функция возвращает названия и значения атрибутов установленные в xml теге.
Замечание: SimpleXML содержит правило добавления итеративных свойств к большинству методов. Они не могут быть просмотрены с использованием var_dump() или каких-либо других средств анализа объектов.
Список параметров
-
ns
-
Не обязательное пространство имен для извлеченных атрибутов
-
is_prefix
-
По умолчанию
FALSE
Возвращаемые значения
Возвращает итеративный объект SimpleXMLElement, по которому можно перемещаться для перебора всех атрибутов тега.
Вернет NULL
если вызванный объект SimpleXMLElement
уже представляет собой атрибуты, а не тег.
Примеры
Пример #1 Интерпретация XML строки
<?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"
- Функция SimpleXMLElement::addAttribute() - Добавляет атрибут к SimpleXML-элементу
- Функция SimpleXMLElement::addChild() - Добавляет дочерний элемент к узлу XML
- Функция SimpleXMLElement::asXML() - Возвращает сформированный XML документ в виде строки используя SimpleXML элемент
- Функция SimpleXMLElement::attributes() - Возвращает атрибуты элемента
- Функция SimpleXMLElement::children() - Поиск дочерних элементов данного узла
- Функция SimpleXMLElement::__construct() - Создание нового SimpleXMLElement объекта
- Функция SimpleXMLElement::count() - Считает количество дочерних элементов у текущего элемента
- Функция SimpleXMLElement::getDocNamespaces() - Возвращает объявленное пространство имен в документе
- Функция SimpleXMLElement::getName() - Получение имени XML элемента
- Функция SimpleXMLElement::getNamespaces() - Получение пространств имен, используемых в документе
- Функция SimpleXMLElement::registerXPathNamespace() - Создает префикс/пространство имен контекста для следующего XPath запроса
- Функция SimpleXMLElement::saveXML() - Псевдоним SimpleXMLElement::asXML
- Функция SimpleXMLElement::__toString() - Returns the string content
- Функция SimpleXMLElement::xpath() - Запускает XPath запрос к XML данным
Коментарии
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"
?>
<?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';
?>
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'
?>
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!
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
Easiest and safest way to get attributes as an array is to use the iterator_to_array function (see function.iterator-to-array):
<?php
$x = new SimpleXMLElement('<div class="myclass" id="myid"/>');
$attributes = iterator_to_array($x->attributes());
?>