[![Arduino CI](https://github.com/RobTillaart/XMLWriter/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/XMLWriter/blob/master/LICENSE) [![GitHub release](https://img.shields.io/github/release/RobTillaart/XMLWriter.svg?maxAge=3600)](https://github.com/RobTillaart/XMLWriter/releases) # XMLWriter Arduino Library to create simple XML (messages, files, print, ...) ## Description The XMLWriter class supports generating XML files and send these over a stream like Ethernet SD.File or Serial. When instantiating an XMLWriter one can define the internal buffer size. A bigger buffer will make the output faster, especially for Ethernet and SD.File. The buffer size should be at least 2 bytes and max 250. How much faster depends on the properties of the stream and the platform used. E.g. the baudrate and internal buffer of Serial, packet behaviour of Ethernet, or paging of SD cards. If performance is low one should do testruns with different sizes for the buffer and choose one that is appropriate. Indicative sizes based upon the examples. Run your tests to find your application optimum. | STREAM | SIZE | |:------------|:----------| | Ethernet | 20-30 | | Serial | 5 | | SD File | 10-16 | **IMPORTANT:** When using buffering you should always call **XML.flush()** at the end of the XML generation. This will flush the last bytes in the internal buffer into the output stream. ## Interface ### Constructor - **XMLWriter(stream, bufsize);** Constructor defines the stream and the buffersize to optimize performance vs memory usage. ### Functions for manual layout control - **setIndentSize(size = 2)** preferred a multiple of 2; no limit - **getIndentSize()** returns set indent - **incrIndent()** increments indent by 2 spaces - **decrIndent()** decrements indent by 2 spaces - **indent()** manually indent output - **raw(str)** inject any string ### General settings - **setConfig(cfg)** used to show/strip comment, indent, newLine. use **setConfig(0);** to minimize the output - **newLine(n)** add a number of newlines to the output, default = 1 ### Functions - **header()** injects standard XML header string, must be first line - **reset()** resets internal state, to be called before new XML is written - **comment(text, multiline)** \