diff --git a/src/XMLSerializer.php b/src/XMLSerializer.php index 3f477b5..253509f 100644 --- a/src/XMLSerializer.php +++ b/src/XMLSerializer.php @@ -2,6 +2,7 @@ namespace TheSeer\Tokenizer; use DOMDocument; +use XMLWriter; class XMLSerializer { @@ -32,7 +33,15 @@ public function toXML(TokenCollection $tokens): string { $writer = new \XMLWriter(); $writer->openMemory(); $writer->setIndent(true); + $writer->startDocument(); + $this->appendToWriter($writer, $tokens); + $writer->endDocument(); + + return $writer->outputMemory(); + } + + public function appendToWriter(XMLWriter $writer, TokenCollection $tokens): void { $writer->startElement('source'); $writer->writeAttribute('xmlns', $this->xmlns->asString()); @@ -67,8 +76,5 @@ public function toXML(TokenCollection $tokens): string { } $writer->endElement(); - $writer->endDocument(); - - return $writer->outputMemory(); } } diff --git a/tests/XMLSerializerTest.php b/tests/XMLSerializerTest.php index 7cbbbe0..6e71d5f 100644 --- a/tests/XMLSerializerTest.php +++ b/tests/XMLSerializerTest.php @@ -25,6 +25,21 @@ public function testCanBeSerializedToXml(): void { $this->assertEquals($expected, $serializer->toXML($this->tokens)); } + public function testCanAppendToWriter(): void { + $expected = \file_get_contents(__DIR__ . '/_files/test.php.xml'); + + $writer = new \XMLWriter(); + $writer->openMemory(); + $writer->setIndent(true); + + $serializer = new XMLSerializer(); + $writer->startDocument(); + $serializer->appendToWriter($writer, $this->tokens); + $writer->endDocument(); + + $this->assertEquals($expected, $writer->outputMemory()); + } + public function testCanBeSerializedToDomDocument(): void { $serializer = new XMLSerializer(); $result = $serializer->toDom($this->tokens);