XML文書の作成 | XML & DOM

SabelにはXMLを扱うクラス群が用意されていて、簡単にXML(DOM)を扱うことができます。
まず、DOMからXML文書を作成する基本的なコード例を示します。
$doc = Sabel_Xml_Document::create();
$root = $doc->createElement("root");
$doc->setDocumentElement($root);        // root要素をドキュメント要素(ルート)にセット

$parents = $root->addChild("parents");  // root要素の子要素としてparents要素を追加

$p1 = $parents->addChild("parent");     // parents要素の子要素としてparent要素を追加
$p1->at("name", "p1");                  // parent要素のname属性にp1をセット
$children1 = $p1->addChild("children");
$children1->addChild("child1")->at("name", "p1c1");
$children1->addChild("child2")->at("name", "p1c2");

$p2 = $parents->addChild("parent");
$p2->at("name", "p2");
$children2 = $p2->addChild("children");
$children2->addChild("child1")->at("name", "p2c1");
$children2->addChild("child2")->at("name", "p2c2");

echo $doc->toXML();  // XMLとして出力
addChild()メソッド は指定した名前の要素を作成し、その要素を返します。つまり、以下の2つは同じ動作をします。
$elem要素に"foo"要素を追加する

$foo = $doc->createElement("foo");
$elem->appendChild($foo);
----------------------------------------------------
$foo = $elem->addChild("foo");
また、at()メソッド は setAttribute()メソッド のエイリアスで、引数が1つの場合は getAttribute()メソッド の代わりとなります。
$elem->at("key", "value");
$elem->setAttribute("key", "value");
----------------------------------------------------
echo $elem->at("key");
echo $elem->getAttribute("key");
上記のサンプルコードで出力される(組み立てられる)XMLは下記のようなものとなります。
<?xml version="1.0" encoding="utf-8"?>
<root>
  <parents>
    <parent name="p1">
      <children>
        <child1 name="p1c1"/>
        <child2 name="p1c2"/>
      </children>
    </parent>
    <parent name="p2">
      <children>
        <child1 name="p2c1"/>
        <child2 name="p2c2"/>
      </children>
    </parent>
  </parents>
</root>
要素の中身のテキストをセットするには setNodeValue()メソッド を使用してください。第2引数に true を渡すと CDATAセクション としてセットすることができます。
...

$p1 = $parents->addChild("parent");
$p1->at("name", "p1");
$children1 = $p1->addChild("children");
$p1c1 = $children1->addChild("child1");
$p1c1->at("name", "p1c1")->setNodeValue("aaa");

$p1c2 = $children1->addChild("child2");
$p1c2->at("name", "p1c2")->setNodeValue("<b>bold</b>", true);

...
XMLとして出力すると、要素の中身がセットされていることが分かります。
...
<parent name="p1">
  <children>
    <child1 name="p1c1">aaa</child1>
    <child2 name="p1c2"><![CDATA[<b>bold</b>]]></child2>
  </children>
</parent>
...
なお、対象の要素が子要素を持っている場合に setNodeValue()メソッド を実行すると、それら子要素(テキストノードも含め)は全て削除されます。テキスト要素を追加したい場合は addText()メソッド を使用してください。setNodeValue()メソッド同様、第2引数に true を渡すと CDATAセクション として追加されます。
echo $elem->getNodeValue();  // "text"

$elem->addText("_text1");

echo $elem->getNodeValue();  // "text_text1"
XML文書として保存する場合は saveXML() にファイルパスを渡してください。
$doc->saveXML("/path/to/test.xml");