Reading the attributes of the root element with name space prefixes as in an Atom feed
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/"Ck4EQXYzeCp7ImA9WhZWFE4."">
<?php
$xml = @simplexml_load_file($feed);
$att_gd = $xml->attributes("gd",1);
$Etag = $att_gd["etag"];
?>
SimpleXMLElement::attributes
(PHP 5 >= 5.0.1)
SimpleXMLElement::attributes — 要素の属性を定義する
説明
public SimpleXMLElement SimpleXMLElement::attributes
([ string $ns = NULL
[, bool $is_prefix = false
]] )
この関数は、XMLタグの中で定義された属性とその値を取得します。
注意: SimpleXML では、ほとんどのメソッドに反復処理を追加するための手順が定義されています。 これらは、var_dump() やオブジェクトを評価する他の手段で 見ることはできません。
パラメータ
- ns
-
オプションで指定する、取得した属性の名前空間。
- is_prefix
-
デフォルトは FALSE。
返り値
SimpleXMLElement オブジェクトを返します。 これを反復処理すれば、そのタグの属性を順に処理することができます。
タグではなく属性を指している SimpleXMLElement に対してコールした場合は NULL を返します。
例
例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"
Andrei
16-May-2011 04:46
sarlak
27-Apr-2011 01:12
<?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';
?>
leap
02-Apr-2011 09:07
If you want to save the value of an attribute into an array, typecast it to a string.
<?php
// stores an xml-element-object
$dataStore['value'] = $attributes->myValue
// stores the value of the attribute
$dataStore['value'] = (string)$attributes->myValue
?>
alan at performantsystems dot com
23-May-2010 10:26
So lets say you have database type data in an XML string called $xmlstring with the key or item ID as an XML Attribute and all content data as regular XML Elements, as above. SimpleXML processes the Attributes as an array, so we can play along and push the Attributes into an array. Then we can get the value of any specific Attribute we want by addressing it by name, such as "ID".
Considering this data:
<?xml version="1.0" encoding="utf-8"?>
<data>
<item ID="30001">
<Company>Navarro Corp.</Company>
</item>
<item ID="30002">
<Company>Performant Systems</Company>
</item>
<item ID="30003">
<Company>Digital Showcase</Company>
</item>
</data>
Example of listing both the ID Attribute and Company Element values:
<?php
$xmlObject = new SimpleXMLElement($xmlstring);
foreach ($xmlObject->children() as $node) {
$arr = $node->attributes(); // returns an array
print ("ID=".$arr["ID"]); // get the value of this attribute
print (" Company=".$node->Company);
print ("<p><hr>");
}
?>
Xeoncross
10-Apr-2010 07:46
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"
?>
gillllberg at gmail dot com
04-Nov-2009 02:21
To get an attribute in the node, use node->attributes()->attributeName
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'];
?>
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;
}
}
?>
