README (2303B)
1 XML parser 2 ---------- 3 4 A small XML parser. 5 6 7 Dependencies 8 ------------ 9 10 - C compiler (ANSI). 11 12 13 Features 14 -------- 15 16 - Relatively small parser. 17 - Simple API using callback functions. 18 - Fast 19 - Portable 20 - No dynamic memory allocation. 21 22 23 Supports 24 -------- 25 26 - Tags in short-form (<img src="lolcat.jpg" title="Meow" />). 27 - Tag attributes. 28 - Short attributes without an explicitly set value (<input type="checkbox" checked />). 29 - Comments 30 - CDATA sections. 31 - Helper function (xml_entitytostr) to convert XML 1.0 / HTML 2.0 named entities 32 and numeric entities to UTF-8. 33 - Reading XML from a file descriptor, string buffer or any custom reader: 34 see: XMLParser.getnext or GETNEXT() macro. 35 36 37 Design choices and scope 38 ------------------------ 39 40 - Compliance: it is not a fully compliant XML parser, but it supports reading 41 XML data for many practical use-cases, some are: 42 - RSS reader (sfeed) 43 - HTML to plain-text converter (webdump). 44 - HTML extractor for websites (idiotbox/tscrape/frontends). 45 - The XML data is not checked for errors so it will continue parsing XML data. 46 However the parser should not crash, hang, etc. 47 - Performance: data is buffered even if a handler is not set: to make parsing 48 faster change this code from xml.c. 49 - Internally fixed-size buffers are used, callbacks like XMLParser.xmldata are 50 called multiple times for the same tag if the data size is bigger than the 51 internal buffer size (sizeof(XMLParser.data)). To differentiate between new 52 calls for data the xml*start and xml*end handlers can be used. 53 - It does not handle XML white-space rules for tag data. The raw values 54 including white-space is passed. This is useful in some cases, like for 55 parsing HTML <pre> tags. 56 - The XML specification has no limits on tag and attribute names. For 57 simplicity/sanity sake this XML parser takes some liberties. Tag and 58 attribute names are truncated if they are excessively long. 59 - Security: entity expansions are not handled (can cause "billion laughs 60 attack"). 61 - DOCTYPE, ATTLIST or DTD declarations are ignored. 62 63 64 Files used 65 ---------- 66 67 xml.c and xml.h 68 69 70 Interface / API 71 --------------- 72 73 Should be trivial, see xml.c and xml.h and the examples below. 74 75 76 Examples 77 -------- 78 79 See skeleton.c for a base program to start quickly. 80 81 82 License 83 ------- 84 85 ISC, see LICENSE file.