PHP: SimpleXMLElement->attributes() - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

SimpleXMLElement->children() SimpleXMLElement->asXML()

Last updated: Sat, 27 Jan 2007

view this page in

# SimpleXMLElement->attributes()

(no version information, might be only in CVS)

SimpleXMLElement->attributes() -- Identifies an element's attributes

## Описание

class SimpleXMLElement {
SimpleXMLElement attributes ( [string ns [, bool is_prefix]] )
}

This function provides the attributes and values defined within an xml tag.

> Замечание: SimpleXML содержит правило добавления итеративных свойств к большинству методов. Они не могут быть просмотрены с испольванием var_dump() или каких-либо других средств анализа объектов.

## Список параметров

`ns`

  An optional namespace for the retrieved attributes

`is_prefix`

  Default to `FALSE`

## Возвращаемые значения

## Примеры

Пример 1. Interpret an XML string

`<?php
$string = <<<XML
<a xmlns:b>
<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"

add a note User Contributed Notes
SimpleXMLElement->attributes()
skerr at mojavi dot org
09-Dec-2004 10:55
`You can also access the node as an array to get attributes:
<?php
$xml = simplexml_load_file('file.xml');
echo 'Attribute: ' . $xml['attribute'];
?>`
christian at koch dot net
08-Nov-2004 12:35
`PHP5:: I think this is a fine solution to get the attributes easier...
<?php
class EFXMLElement extends SimpleXMLElement {
function attributes() {
return new EFXMLAttributes(parent::attributes());
}
}
class EFXMLAttributes {
private $attributes;
function __construct($attributes) {
$this->attributes = $attributes;
}
function __get($name) {
if (isset($this->attributes[$name])) {
return $this->attributes[$name];
} else {
return false;
}
}
}
if (file_exists('pref.xml')) {
$tst = new EFXMLElement(file_get_contents('pref.xml'));
var_dump($tst->plugins->plugin[0]->attributes()->name);
} else {
exit('Failed to open test.xml.');
}
?>
XML::example
<?xml version="1.0" encoding="ISO8859-1" ?>
<preferences>
<system>
EF3
</system>
<websites>
<website name="demo">
<scriptpath>/</scriptpath>
</website>
<website name="other">
x
</website>
</websites>
<plugins>
<plugin type="single" name="content" ontemplate="yes">
<tag><![CDATA[<%content%>]]></tag>
<class>EFContentPlugin</class>
<source>/ef3/plugins/EFContentPlugin.class</source>
</plugin>
<plugin type="single" name="attribute" ontemplate="no">
<tag><![CDATA[<%attribute @%>]]></tag>
<class>EFAttributePlugin</class>
<source>/ef3/plugins/EFAttributePlugin.class</source>
</plugin>
<plugin type="single" name="component" ontemplate="no">
<tag><![CDATA[<%component @%>]]></tag>
<class>EFComponentPlugin</class>
<source>/ef3/plugins/EFComponentPlugin.class</source>
</plugin>
<plugin type="double" name="klammer" ontemplate="no">
<tag><![CDATA[<KLAMMER@>]]></tag>
<closer><![CDATA[<KLAMMER@>]]></closer>
<class>KlammerPlugin</class>
<source>/ef3/plugins/KlammerPlugin.class</source>
</plugin>
</plugins>
</preferences>`
sveta at microbecal dot com
30-Oct-2004 03:03
`Namespace handling example:
------------------------------------
test.xml:
<?xml version="1.0"?>
<Workbook xmlns="http://url1" xmlns:ss="http://url2">
<Worksheet ss:Name="English">
</Worksheet>
</Workbook>
script.php:
$xml_file = 'test.xml';
$xml = simplexml_load_file($xml_file);
foreach($xml->Worksheet->attributes('http://url2')
as $a => $b) {
echo $a,'="',$b,"\"\n";
}`
tychay at php dot net
28-Sep-2004 10:04
`BTW, It occurs to me that why do you need the function anyway? You just access it directly as (string) $object[$attribute].`
tychay at php dot net
28-Sep-2004 04:31
`Why bother iterating over all the elements when they are already indexed? something like...
function simplexml_find_attribute(SimpleXMLElement $element, $attributeName) {
$attrs = $element->attributes();
if (isset($attrs[$attributeName])) {
return (string) $attrs[$attributeName];
}
return false;
}
- terry`
Eirik Sletteberg
12-Sep-2004 06:21
`In reply to inge at elektronaut dot no's function:
Notice that this function returns an object, and not
a string. This is quite hard to notice at first, because
if you validate the return against a string, it will return
true:
print findAttribute($Fox, "foo") == "bar"? "Matches.":"Won't match."; // "Matches."
But, if you attempt to use the return for indexing in an array, like:
$MyArray[findattribute($Fox, "foo")] = "bar";
You will get an illegal offset type-error.
------
To correct this, we force-cast the return as a string:
function findAttribute($object, $attribute) {
foreach($object->attributes() as $a => $b) {
if ($a == $attribute) {
$return = $b;
}
}
if($return) {
return (string)$return;
}
}`
inge at elektronaut dot no
26-May-2004 10:53
`here's a simple function to get an attribute by name, based on the example
<?php
function findAttribute($object, $attribute) {
foreach($object->attributes() as $a => $b) {
if ($a == $attribute) {
$return = $b;
}
}
if($return) {
return $return;
}
}
?>`
add a note
SimpleXMLElement->children() SimpleXMLElement->asXML()

Last updated: Sat, 27 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 10:36:09 2007 PST