<?php $source = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'source'; \set_include_path($source . PATH_SEPARATOR . \get_include_path()); //////////////////////////////////////////////////////////////////////////////// require_once 'FluidXml.php'; /***************************** * Creating An XML Document. * ******************************/ $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,
/** * Constructs a new FluidXml instance. * * ```php * $xml = fluidxml(); * // is the same of * $xml = new FluidXml(); * * $xml = fluidxml([ * * 'root' => 'doc', * * 'version' => '1.0', * * 'encoding' => 'UTF-8', * * 'stylesheet' => null ]); * ``` * * @param array $arguments Options that influence the construction of the XML document. * * @return FluidXml A new FluidXml instance. */ function fluidify(...$arguments) { return FluidXml::load(...$arguments); }
describe('.attr', function () { it('should behave like .setAttribute', function () { $xml = new FluidXml(); $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) {