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

search for in the

SimpleXMLElement::addChild> <SimpleXML Functions
Last updated: Fri, 14 Aug 2009

view this page in

SimpleXMLElement::addAttribute

(PHP 5 >= 5.1.3)

SimpleXMLElement::addAttribute Adds an attribute to the SimpleXML element

Description

SimpleXMLElement
void addAttribute ( string $name , string $value [, string $namespace ] )

Adds an attribute to the SimpleXML element.

Parameters

name

The name of the attribute to add.

value

The value of the attribute.

namespace

If specified, the namespace to which the attribute belongs.

Return Values

No value is returned.

Examples

Example #1 Add attributes and children to a SimpleXML element

<?php

include 'example.php';
 
$sxe = new SimpleXMLElement($xmlstr);
$sxe->addAttribute('type''documentary');

$movie $sxe->addChild('movie');
$movie->addChild('title''PHP2: More Parser Stories');
$movie->addChild('plot''This is all about the people who make it work.');

$characters $movie->addChild('characters');
$character  $characters->addChild('character');
$character->addChild('name''Mr. Parser');
$character->addChild('actor''John Doe');

$rating $movie->addChild('rating''5');
$rating->addAttribute('type''stars');
 
echo 
$sxe->asXML();

?>

See Also



SimpleXMLElement::addChild> <SimpleXML Functions
Last updated: Fri, 14 Aug 2009
 
add a note add a note User Contributed Notes
SimpleXMLElement::addAttribute
Ryan Parman (Skyzyx)
02-Dec-2008 04:36
It took me some time to finally figure this out since nobody had blogged about it or documented it anywhere that I could find.

I was trying to define a namespace and use a namespace as attributes like so:

<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="AmazonCustomerByEmail">
    <EmailAddress>user@company.com</EmailAddress>
</Grantee>

I was using the following thinking that when they asked for the namespace, they actually meant the namespace.

$simplexml->addAttribute('xsi', 'http://www.w3.org/2001/XMLSchema-instance', 'xmlns');
$simplexml->addAttribute('type', 'AmazonCustomerByEmail', 'xsi');

Instead, they want the name to have the namespace attached, and to pass the namespace URL as the third parameter. Also by doing this, the xmlns:xsi="url" gets added automatically. I had no idea.

After an hour of non-stop digging, I dug through the CVS commit messages and found a clue which led me to this working code:

$simplexml->addAttribute('xsi:type', 'AmazonCustomerByEmail', 'http://www.w3.org/2001/XMLSchema-instance');
khishigbaatar at 2xcoding dot com
12-Nov-2008 03:44
simpleXML have only read/write methods. Then how to remove attributes in node?
There is a simpe way to remove attribute without DOM extension. Use unset();

Example:
if "samlpe.xml" contains
<?xml version="1.0"?>
<books>
    <book author="unknown">The Secret History of the Mongols</book>
    <book author="Jack Weatherford">Genghis Khan and the Making of the Modern World</book>
    <book author="David Morgan">The Mongols (The Peoples of Europe)</book>
    <book author="Stephen Turnbull">Mongol Warrior 1200-1350</book>
    <book author="Marco Polo">The Travels of Marco Polo</book>
    <book author="J. J. Saunders">The History of Mongol Conquests</book>
</books>

<?php
// load xml file
$xml = simplexml_load_file("sample.xml");

// remove first book's attribute
unset($xml->book[0][author]);

// write xml file
$xml->asXML("sample.xml");
?>

Now "sample.xml" is:
<?xml version="1.0"?>
<books>
    <book>The Secret History of the Mongols</book>
    <book author="Jack Weatherford">Genghis Khan and the Making of the Modern World</book>
    <book author="David Morgan">The Mongols (The Peoples of Europe)</book>
    <book author="Stephen Turnbull">Mongol Warrior 1200-1350</book>
    <book author="Marco Polo">The Travels of Marco Polo</book>
    <book author="J. J. Saunders">The History of Mongol Conquests</book>
</books>

That's it.
markvanstraten at gmail dot om
27-Oct-2008 10:13
Please note: currently this function does not return the object on which it is executed so function chaining is not possible.
cbrand at dodgeit dot com
20-Mar-2007 05:49
It may be helpful to note that the addAttribute method checks the length of the fields to determine whether or not they are empty.  In otherwords if you are trying to addElement("patent_holder", "") this will fail as the strlen is 0.

SimpleXMLElement::addChild> <SimpleXML Functions
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites