Skip to content

Commit de08bbb

Browse files
authored
Merge pull request #38 from staabm/writer
Add XMLSerializer->appendToWriter()
2 parents 2226ff0 + b2fb8be commit de08bbb

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

src/XMLSerializer.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
namespace TheSeer\Tokenizer;
33

44
use DOMDocument;
5+
use XMLWriter;
56

67
class XMLSerializer {
78

@@ -32,7 +33,15 @@ public function toXML(TokenCollection $tokens): string {
3233
$writer = new \XMLWriter();
3334
$writer->openMemory();
3435
$writer->setIndent(true);
36+
3537
$writer->startDocument();
38+
$this->appendToWriter($writer, $tokens);
39+
$writer->endDocument();
40+
41+
return $writer->outputMemory();
42+
}
43+
44+
public function appendToWriter(XMLWriter $writer, TokenCollection $tokens): void {
3645
$writer->startElement('source');
3746
$writer->writeAttribute('xmlns', $this->xmlns->asString());
3847

@@ -67,8 +76,5 @@ public function toXML(TokenCollection $tokens): string {
6776
}
6877

6978
$writer->endElement();
70-
$writer->endDocument();
71-
72-
return $writer->outputMemory();
7379
}
7480
}

tests/XMLSerializerTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,21 @@ public function testCanBeSerializedToXml(): void {
2525
$this->assertEquals($expected, $serializer->toXML($this->tokens));
2626
}
2727

28+
public function testCanAppendToWriter(): void {
29+
$expected = \file_get_contents(__DIR__ . '/_files/test.php.xml');
30+
31+
$writer = new \XMLWriter();
32+
$writer->openMemory();
33+
$writer->setIndent(true);
34+
35+
$serializer = new XMLSerializer();
36+
$writer->startDocument();
37+
$serializer->appendToWriter($writer, $this->tokens);
38+
$writer->endDocument();
39+
40+
$this->assertEquals($expected, $writer->outputMemory());
41+
}
42+
2843
public function testCanBeSerializedToDomDocument(): void {
2944
$serializer = new XMLSerializer();
3045
$result = $serializer->toDom($this->tokens);

0 commit comments

Comments
 (0)