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.
SimpleXMLElement->addAttribute()
(PHP 5 >= 5.1.3)
SimpleXMLElement->addAttribute() — Adds an attribute to the SimpleXML element
说明
SimpleXMLElement
void addAttribute
( string $name
, string $value
[, string $namespace
] )
Adds an attribute to the SimpleXML element.
参数
- name
-
The name of the attribute to add.
- value
-
The value of the attribute.
- namespace
-
If specified, the namespace to which the attribute belongs.
返回值
无返回值。
范例
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();
?>
SimpleXMLElement->addAttribute()
khishigbaatar at 2xcoding dot com
11-Nov-2008 06:44
11-Nov-2008 06:44
markvanstraten at gmail dot om
27-Oct-2008 02:13
27-Oct-2008 02: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 09:49
20-Mar-2007 09: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.
