******************************/ $book = new FluidXml('book'); // or $book = new FluidXml(['root' => 'book']); // $book is an XML document with 'book' as root node. // The default options are: // [ 'root' => 'doc', // The root node of the document. // 'version' => '1.0', // The version for the XML header. // 'encoding' => 'UTF-8', // The encoding for the XML header. // 'stylesheet' => null ]; // An url pointing to an XSL file. $booksheet = new FluidXml('book', ['stylesheet' => 'http://domain.com/style.xsl']); // With PHP 7 this is valid too: // $booksheet = FluidXml::new('book', ['stylesheet' => 'http://domain.com/style.xsl']); $book->setAttribute('type', 'science')->appendChild(['title' => 'The Theory Of Everything', 'author' => 'S. Hawking']); // It creates two nodes, each one with some text inside. echo $book->xml(); // Exports the xml document as a string. echo "————————————————————————————————————————————————————————————————————————————————\n"; /********************** * Context Switching. * ***********************/ /* * Passing a 'true' boolean value to any method that performs an insertion of a node, * returns the newly created node instead of the parent. * This operation is called Context Switch. * Methods that support this context switch are: * - appendChild($child, ...$optionals); * - prependSibling($sibling, ...$optionals); * - appendSibling($sibling, ...$optionals); * and their alias methods (of course). */
$xml->setAttribute('attr1', 'Attr1 Value')->setAttribute(['attr2' => 'Attr2 Value', 'attr3' => 'Attr3 Value'])->appendChild('child', true)->setAttribute('attr4', 'Attr4 Value')->setAttribute(['attr5' => 'Attr5 Value', 'attr6' => 'Attr6 Value']); $alias = new FluidXml(); $alias->attr('attr1', 'Attr1 Value')->attr(['attr2' => 'Attr2 Value', 'attr3' => 'Attr3 Value'])->appendChild('child', true)->attr('attr4', 'Attr4 Value')->attr(['attr5' => 'Attr5 Value', 'attr6' => 'Attr6 Value']); $actual = $xml->xml(); $expected = $alias->xml(); assert($actual === $expected, __($actual, $expected)); }); }); describe('.text', function () { it('should behave like .setText', function () { $xml = new FluidXml(); $xml->setText('Text1')->appendChild('child', true)->setText('Text2'); $alias = new FluidXml(); $alias->text('Text1')->appendChild('child', true)->text('Text2'); $actual = $xml->xml(); $expected = $alias->xml(); assert($actual === $expected, __($actual, $expected)); }); }); }); describe('FluidContext', function () { it('should be iterable returning the represented DOMNode objects', function () { $xml = new FluidXml(); $cx = $xml->appendChild(['head', 'body'], true); $actual = $cx; assert_is_a($actual, \Iterator::class); $representation = []; foreach ($cx as $k => $v) { $actual = \is_int($k); $expected = true; assert($actual === $expected, __($actual, $expected));