Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 1 | TinyXML-2 |
| 2 | ========= |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 3 | |
| 4 | TinyXML is a simple, small, efficient, C++ XML parser that can be |
| 5 | easily integrated into other programs. |
| 6 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 7 | The master is hosted on github: |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 8 | https://github.com/leethomason/tinyxml2 |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 9 | |
Lee Thomason (grinliz) | 6a22be2 | 2012-04-04 12:39:05 -0700 | [diff] [blame] | 10 | The online HTML version of these docs: |
| 11 | http://grinninglizard.com/tinyxml2docs/index.html |
| 12 | |
Lee Thomason (grinliz) | ae209f6 | 2012-04-04 22:00:07 -0700 | [diff] [blame] | 13 | Examples are in the "related pages" tab of the HTML docs. |
Lee Thomason (grinliz) | 6a22be2 | 2012-04-04 12:39:05 -0700 | [diff] [blame] | 14 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 15 | What it does. |
| 16 | ------------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 17 | |
| 18 | In brief, TinyXML parses an XML document, and builds from that a |
| 19 | Document Object Model (DOM) that can be read, modified, and saved. |
| 20 | |
| 21 | XML stands for "eXtensible Markup Language." It is a general purpose |
| 22 | human and machine readable markup language to describe arbitrary data. |
| 23 | All those random file formats created to store application data can |
| 24 | all be replaced with XML. One parser for everything. |
| 25 | |
| 26 | http://en.wikipedia.org/wiki/XML |
| 27 | |
| 28 | There are different ways to access and interact with XML data. |
| 29 | TinyXML-2 uses a Document Object Model (DOM), meaning the XML data is parsed |
| 30 | into a C++ objects that can be browsed and manipulated, and then |
| 31 | written to disk or another output stream. You can also construct an XML document |
| 32 | from scratch with C++ objects and write this to disk or another output |
| 33 | stream. You can even use TinyXML-2 to stream XML programmatically from |
| 34 | code without creating a document first. |
| 35 | |
| 36 | TinyXML-2 is designed to be easy and fast to learn. It is one header and |
| 37 | one cpp file. Simply add these to your project and off you go. |
| 38 | There is an example file - xmltest.cpp - to get you started. |
| 39 | |
| 40 | TinyXML-2 is released under the ZLib license, |
| 41 | so you can use it in open source or commercial code. The details |
| 42 | of the license are at the top of every source file. |
| 43 | |
| 44 | TinyXML-2 attempts to be a flexible parser, but with truly correct and |
| 45 | compliant XML output. TinyXML-2 should compile on any reasonably C++ |
| 46 | compliant system. It does not rely on exceptions, RTTI, or the STL. |
| 47 | |
Kevin Wojniak | 273f7b4 | 2013-01-09 09:21:13 -0800 | [diff] [blame^] | 48 | What it doesn't do. |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 49 | ------------------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 50 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 51 | TinyXML-2 doesn't parse or use DTDs (Document Type Definitions) or XSLs |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 52 | (eXtensible Stylesheet Language.) There are other parsers out there |
| 53 | that are much more fully |
| 54 | featured. But they are also much bigger, take longer to set up in |
| 55 | your project, have a higher learning curve, and often have a more |
| 56 | restrictive license. If you are working with browsers or have more |
| 57 | complete XML needs, TinyXML-2 is not the parser for you. |
| 58 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 59 | TinyXML-1 vs. TinyXML-2 |
| 60 | ----------------------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 61 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 62 | Which should you use? TinyXML-2 uses a similar API to TinyXML-1 and the same |
| 63 | rich test cases. But the implementation of the parser is completely re-written |
| 64 | to make it more appropriate for use in a game. It uses less memory, is faster, |
Kevin Wojniak | 273f7b4 | 2013-01-09 09:21:13 -0800 | [diff] [blame^] | 65 | and uses far fewer memory allocations. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 66 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 67 | TinyXML-2 has no requirement for STL, but has also dropped all STL support. All |
| 68 | strings are query and set as 'const char*'. This allows the use of internal |
| 69 | allocators, and keeps the code much simpler. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 70 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 71 | Both parsers: |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 72 | |
| 73 | 1. Simple to use with similar APIs. |
| 74 | 2. DOM based parser. |
| 75 | 3. UTF-8 Unicode support. http://en.wikipedia.org/wiki/UTF-8 |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 76 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 77 | Advantages of TinyXML-2 |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 78 | |
| 79 | 1. The focus of all future dev. |
| 80 | 2. Many fewer memory allocation (1/10th to 1/100th), uses less memory |
| 81 | (about 40% of TinyXML-1), and faster. |
| 82 | 3. No STL requirement. |
| 83 | 4. More modern C++, including a proper namespace. |
| 84 | 5. Proper and useful handling of whitespace |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 85 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 86 | Advantages of TinyXML-1 |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 87 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 88 | 1. Can report the location of parsing errors. |
| 89 | 2. Support for some C++ STL conventions: streams and strings |
| 90 | 3. Very mature and well debugged code base. |
| 91 | |
| 92 | Features |
| 93 | -------- |
| 94 | |
| 95 | ### Memory Model |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 96 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 97 | An XMLDocument is a C++ object like any other, that can be on the stack, or |
| 98 | new'd and deleted on the heap. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 99 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 100 | However, any sub-node of the Document, XMLElement, XMLText, etc, can only |
| 101 | be created by calling the appropriate XMLDocument::NewElement, NewText, etc. |
| 102 | method. Although you have pointers to these objects, they are still owned |
| 103 | by the Document. When the Document is deleted, so are all the nodes it contains. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 104 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 105 | ### White Space |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 106 | |
Lee Thomason (grinliz) | 9b6011c | 2012-09-09 19:12:06 -0700 | [diff] [blame] | 107 | #### Whitespace Preservation (default) |
| 108 | |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 109 | Microsoft has an excellent article on white space: http://msdn.microsoft.com/en-us/library/ms256097.aspx |
| 110 | |
Lee Thomason (grinliz) | c5defa6 | 2012-09-08 22:06:14 -0700 | [diff] [blame] | 111 | By default, TinyXML-2 preserves white space in a (hopefully) sane way that is almost complient with the |
Lee Thomason (grinliz) | 9b6011c | 2012-09-09 19:12:06 -0700 | [diff] [blame] | 112 | spec. (TinyXML-1 used a completely different model, much more similar to 'collapse', below.) |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 113 | |
| 114 | As a first step, all newlines / carriage-returns / line-feeds are normalized to a |
| 115 | line-feed character, as required by the XML spec. |
| 116 | |
| 117 | White space in text is preserved. For example: |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 118 | |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 119 | <element> Hello, World</element> |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 120 | |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 121 | The leading space before the "Hello" and the double space after the comma are |
| 122 | preserved. Line-feeds are preserved, as in this example: |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 123 | |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 124 | <element> Hello again, |
| 125 | World</element> |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 126 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 127 | However, white space between elements is **not** preserved. Although not strictly |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 128 | compliant, tracking and reporting inter-element space is awkward, and not normally |
| 129 | valuable. TinyXML-2 sees these as the same XML: |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 130 | |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 131 | <document> |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 132 | <data>1</data> |
| 133 | <data>2</data> |
| 134 | <data>3</data> |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 135 | </document> |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 136 | |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 137 | <document><data>1</data><data>2</data><data>3</data></document> |
Lee Thomason (grinliz) | ec7777e | 2012-02-26 20:51:27 -0800 | [diff] [blame] | 138 | |
Lee Thomason (grinliz) | c5defa6 | 2012-09-08 22:06:14 -0700 | [diff] [blame] | 139 | #### Whitespace Collapse |
| 140 | |
Lee Thomason (grinliz) | 9b6011c | 2012-09-09 19:12:06 -0700 | [diff] [blame] | 141 | For some applications, it is preferable to collapse whitespace. Collapsing |
| 142 | whitespace gives you "HTML-like" behavior, which is sometimes more suitable |
| 143 | for hand typed documents. |
| 144 | |
| 145 | TinyXML-2 supports this with the 'whitespace' parameter to the XMLDocument constructor. |
Lee Thomason (grinliz) | c5defa6 | 2012-09-08 22:06:14 -0700 | [diff] [blame] | 146 | (The default is to preserve whitespace, as described above.) |
| 147 | |
| 148 | However, you may also use COLLAPSE_WHITESPACE, which will: |
| 149 | |
Lee Thomason (grinliz) | 9b6011c | 2012-09-09 19:12:06 -0700 | [diff] [blame] | 150 | * Remove leading and trailing whitespace |
| 151 | * Convert newlines and line-feeds into a space character |
| 152 | * Collapse a run of any number of space characters into a single space character |
Lee Thomason (grinliz) | c5defa6 | 2012-09-08 22:06:14 -0700 | [diff] [blame] | 153 | |
| 154 | Note that (currently) there is a performance impact for using COLLAPSE_WHITESPACE. |
| 155 | It essentially causes the XML to be parsed twice. |
| 156 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 157 | ### Entities |
| 158 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 159 | TinyXML-2 recognizes the pre-defined "character entities", meaning special |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 160 | characters. Namely: |
| 161 | |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 162 | & & |
| 163 | < < |
| 164 | > > |
| 165 | " " |
| 166 | ' ' |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 167 | |
| 168 | These are recognized when the XML document is read, and translated to there |
| 169 | UTF-8 equivalents. For instance, text with the XML of: |
| 170 | |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 171 | Far & Away |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 172 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 173 | will have the Value() of "Far & Away" when queried from the XMLText object, |
| 174 | and will be written back to the XML stream/file as an ampersand. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 175 | |
| 176 | Additionally, any character can be specified by its Unicode code point: |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 177 | The syntax " " or " " are both to the non-breaking space characher. |
| 178 | This is called a 'numeric character reference'. Any numeric character reference |
| 179 | that isn't one of the special entities above, will be read, but written as a |
| 180 | regular code point. The output is correct, but the entity syntax isn't preserved. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 181 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 182 | ### Printing |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 183 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 184 | #### Print to file |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 185 | You can directly use the convenience function: |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 186 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 187 | XMLDocument doc; |
| 188 | ... |
Lee Thomason | 77d7f20 | 2012-07-29 18:51:41 -0700 | [diff] [blame] | 189 | doc.SaveFile( "foo.xml" ); |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 190 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 191 | Or the XMLPrinter class: |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 192 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 193 | XMLPrinter printer( fp ); |
| 194 | doc.Print( &printer ); |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 195 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 196 | #### Print to memory |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 197 | Printing to memory is supported by the XMLPrinter. |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 198 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 199 | XMLPrinter printer; |
| 200 | doc->Print( &printer ); |
| 201 | // printer.CStr() has a const char* to the XML |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 202 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 203 | #### Print without an XMLDocument |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 204 | |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 205 | When loading, an XML parser is very useful. However, sometimes |
| 206 | when saving, it just gets in the way. The code is often set up |
| 207 | for streaming, and constructing the DOM is just overhead. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 208 | |
Lee Thomason | 12d5a03 | 2012-02-29 16:19:03 -0800 | [diff] [blame] | 209 | The Printer supports the streaming case. The following code |
| 210 | prints out a trivially simple XML file without ever creating |
| 211 | an XML document. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 212 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 213 | XMLPrinter printer( fp ); |
| 214 | printer.OpenElement( "foo" ); |
| 215 | printer.PushAttribute( "foo", "bar" ); |
| 216 | printer.CloseElement(); |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 217 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 218 | Examples |
| 219 | -------- |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 220 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 221 | #### Load and parse an XML file. |
| 222 | |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 223 | /* ------ Example 1: Load and parse an XML file. ---- */ |
| 224 | { |
| 225 | XMLDocument doc; |
| 226 | doc.LoadFile( "dream.xml" ); |
| 227 | } |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 228 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 229 | #### Lookup information. |
| 230 | |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 231 | /* ------ Example 2: Lookup information. ---- */ |
| 232 | { |
| 233 | XMLDocument doc; |
| 234 | doc.LoadFile( "dream.xml" ); |
| 235 | |
| 236 | // Structure of the XML file: |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 237 | // - Element "PLAY" the root Element, which is the |
| 238 | // FirstChildElement of the Document |
| 239 | // - - Element "TITLE" child of the root PLAY Element |
| 240 | // - - - Text child of the TITLE Element |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 241 | |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 242 | // Navigate to the title, using the convenience function, |
| 243 | // with a dangerous lack of error checking. |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 244 | const char* title = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->GetText(); |
| 245 | printf( "Name of play (1): %s\n", title ); |
| 246 | |
Lee Thomason | c50b6b4 | 2012-03-24 12:51:47 -0700 | [diff] [blame] | 247 | // Text is just another Node to TinyXML-2. The more |
| 248 | // general way to get to the XMLText: |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 249 | XMLText* textNode = doc.FirstChildElement( "PLAY" )->FirstChildElement( "TITLE" )->FirstChild()->ToText(); |
| 250 | title = textNode->Value(); |
| 251 | printf( "Name of play (2): %s\n", title ); |
| 252 | } |
Lee Thomason | 87e475a | 2012-03-20 11:55:29 -0700 | [diff] [blame] | 253 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 254 | Using and Installing |
| 255 | -------------------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 256 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 257 | There are 2 files in TinyXML-2: |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 258 | * tinyxml2.cpp |
| 259 | * tinyxml2.h |
| 260 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 261 | And additionally a test file: |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 262 | * xmltest.cpp |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 263 | |
Lee Thomason | 2f6e476 | 2012-04-05 08:52:07 -0700 | [diff] [blame] | 264 | Simply compile and run. There is a visual studio 2010 project included, a simple Makefile, |
| 265 | an XCode project, and a cmake CMakeLists.txt included to help you. The top of tinyxml.h |
| 266 | even has a simple g++ command line if you are are *nix and don't want to use a build system. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 267 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 268 | Documentation |
| 269 | ------------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 270 | |
| 271 | The documentation is build with Doxygen, using the 'dox' |
| 272 | configuration file. |
| 273 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 274 | License |
| 275 | ------- |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 276 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 277 | TinyXML-2 is released under the zlib license: |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 278 | |
| 279 | This software is provided 'as-is', without any express or implied |
| 280 | warranty. In no event will the authors be held liable for any |
| 281 | damages arising from the use of this software. |
| 282 | |
| 283 | Permission is granted to anyone to use this software for any |
| 284 | purpose, including commercial applications, and to alter it and |
| 285 | redistribute it freely, subject to the following restrictions: |
| 286 | |
| 287 | 1. The origin of this software must not be misrepresented; you must |
| 288 | not claim that you wrote the original software. If you use this |
| 289 | software in a product, an acknowledgment in the product documentation |
| 290 | would be appreciated but is not required. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 291 | 2. Altered source versions must be plainly marked as such, and |
| 292 | must not be misrepresented as being the original software. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 293 | 3. This notice may not be removed or altered from any source |
| 294 | distribution. |
| 295 | |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 296 | Contributors |
| 297 | ------------ |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 298 | |
| 299 | Thanks very much to everyone who sends suggestions, bugs, ideas, and |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 300 | encouragement. It all helps, and makes this project fun. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 301 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 302 | The original TinyXML-1 has many contributors, who all deserve thanks |
| 303 | in shaping what is a very successful library. Extra thanks to Yves |
| 304 | Berquin and Andrew Ellerton who were key contributors. |
Lee Thomason (grinliz) | 9c38d13 | 2012-02-24 21:50:50 -0800 | [diff] [blame] | 305 | |
Lee Thomason (grinliz) | 2812986 | 2012-02-25 21:11:20 -0800 | [diff] [blame] | 306 | TinyXML-2 grew from that effort. Lee Thomason is the original author |
| 307 | of TinyXML-2 (and TinyXML-1) but hopefully TinyXML-2 will be improved |
Arkadiy Shapkin | 2204dda | 2012-07-21 02:15:50 +0400 | [diff] [blame] | 308 | by many contributors. |