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> <SimpleXMLElement
Last updated: Fri, 20 Nov 2009

view this page in

SimpleXMLElement::addAttribute

(PHP 5 >= 5.1.3)

SimpleXMLElement::addAttribute Adds an attribute to the SimpleXML element

Description

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> <SimpleXMLElement
Last updated: Fri, 20 Nov 2009
 
add a note add a note User Contributed Notes
SimpleXMLElement::addAttribute
Ryan Parman (Skyzyx)
02-Dec-2008 12: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.

<?php
$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:

<?php
$simplexml
->addAttribute('xsi:type', 'AmazonCustomerByEmail', 'http://www.w3.org/2001/XMLSchema-instance');
?>
khishigbaatar at 2xcoding dot com
12-Nov-2008 11:44
simpleXML have only read/write methods, so to remove attributes in nodes, there is a simple way even 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.
cbrand at dodgeit dot com
21-Mar-2007 01: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> <SimpleXMLElement
Last updated: Fri, 20 Nov 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites