ここでの例として、下記のXML文書を使用します。
<?xml version="1.0" encoding="utf-8"?>
<root>
<a at="1"/>
<b at="2"/>
<c at="3"/>
</root>
要素の追加
子要素を追加するには addChild() または appendChild() の2つの方法があります。既に要素がある場合は、appendChild() を使用すると良いでしょう。
$doc = Sabel_Xml_Document::create();
$root = $doc->load("XML", "/path/to/test.xml");
$d = $doc->createElement("d")->at("at", "4");
$root->appendChild($d);
echo $doc->toXML();
<?xml version="1.0" encoding="utf-8"?>
<root>
<a at="1"/>
<b at="2"/>
<c at="3"/>
<d at="4"/>
</root>
まだ要素がない場合には、addChild() を使用することができます。第1引数には要素名を、第2引数には要素の値を指定できます。なお、addChild()メソッド の戻り値は追加されたその要素のため、それに対し属性などを付加することができます。
...
$d = $root->appendChild("d", "hoge");
$d->at("d", "4");
echo $doc->toXML();
<?xml version="1.0" encoding="utf-8"?>
<root>
<a at="1"/>
<b at="2"/>
<c at="3"/>
<d at="4">hoge</d>
</root>
要素の挿入
ある要素の前後に新たな要素を追加することができます。例えば b要素 の前に d要素 を挿入するには、下記のようにします。
$doc = Sabel_Xml_Document::create();
$root = $doc->load("XML", "/path/to/test.xml");
$d = $doc->createElement("d")->at("at", "4");
$root->b->insertPreviousSibling($d);
echo $doc->toXML();
<?xml version="1.0" encoding="utf-8"?>
<root>
<a at="1"/>
<d at="4"/>
<b at="2"/>
<c at="3"/>
</root>
後に追加するには、insertNextSibling()メソッド を使用します。
...
$root->b->insertNextSibling($d);
echo $doc->toXML();
<?xml version="1.0" encoding="utf-8"?>
<root>
<a at="1"/>
<b at="2"/>
<d at="4"/>
<c at="3"/>
</root>
要素の削除
要素を削除するには、その要素のremove()メソッドを実行するだけです。
例えば b要素 を削除する場合は、下記のようなコードとなります。非常にシンプルです。
$doc = Sabel_Xml_Document::create();
$root = $doc->load("XML", "/path/to/test.xml");
$root->b->remove();
echo $doc->toXML();
<?xml version="1.0" encoding="utf-8"?>
<root>
<a at="1"/>
<c at="3"/>
</root>
要素の交換
a要素 と c要素 を入れ替えるには、swap()メソッド を使用します。swap()メソッド は兄弟要素間でのみ使用可能なことに注意してください。
$doc = Sabel_Xml_Document::create();
$root = $doc->load("XML", "/path/to/test.xml");
$a = $root->a[0];
$c = $root->c[0];
$a->swap($c);
echo $doc->toXML();
<?xml version="1.0" encoding="utf-8"?>
<root>
<c at="3"/>
<b at="2"/>
<a at="1"/>
</root>
なお、「aをcと入れ替える」と「cをaと入れ替える」は同じことなので、下記でもよいことになります。
$c->swap($a);