Click here to Skip to main content
15,860,844 members
Articles / Programming Languages / C++
Article

A simple STL based XML parser

Rate me:
Please Sign up or sign in to vote.
4.21/5 (22 votes)
16 May 2000 250K   4.6K   70   26
This is a small non-validating XML parser based purely on STL
  • Download source files - 10 Kb
  • This is a small XML parser, based purely on STL. There are two main classes XmlStream and XmlParser. XmlParser.h contains most of the parsing code. It has several state variable, which can be split up into two categories:

    1. Buffer state - Shows where we are parsing from
    2. Parsing state - Shows what we have found
    XmlParser makes extensive use of offsets to keep track of its state. This is done by design. In order to maximize speed it does not do any string copies.

    To start parsing declare an instance of the class XmlStream and setup the buffer that you want to parse. An example is included in Parser.cpp. Call parse in XmlStream, passing in a pointer to the buffer and the buffers length. You will see screen output showing what has been found. This is simple debug output and can be turned off.

    XmlNotify is used as an interface class to notify a subscriber of nodes and elements being found. There is a pointer to a subscriber in the XmlStream class. The subscriber can be set using setSubscriber.

    Notice that no XML document declaration is included nor is a schema included. If those exist in your buffer don't send them to the parser. Later, the ability to remove these, will added in the code to step through these. so this is a non-validating parser. There is one bug in the parser. When an empty node is encountered it will be reported as an element this will be fixed later. An example of this is included in the sample code.

    If you have any suggestions or improvements let me know.

    License

    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here


    Written By
    United States United States
    This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

    Comments and Discussions

     
    QuestionHow to parse XML file Pin
    Rajiv_cn14-Jul-08 23:05
    Rajiv_cn14-Jul-08 23:05 
    GeneralHi. I want your help, David. Pin
    Choi so-dam23-Apr-08 14:38
    Choi so-dam23-Apr-08 14:38 
    NewsHere with Standard C++ only... Pin
    pietrom14-Dec-06 5:28
    pietrom14-Dec-06 5:28 
    GeneralCompiling using MinGW Pin
    Emili___3-Mar-06 2:50
    Emili___3-Mar-06 2:50 
    Questionvc2005 compatibility? Pin
    BryanWilkins19-Dec-05 10:42
    professionalBryanWilkins19-Dec-05 10:42 
    AnswerRe: vc2005 compatibility? Pin
    Jeff_rowa22-Nov-06 1:24
    Jeff_rowa22-Nov-06 1:24 
    GeneralW3C compliance Pin
    Umut Alev25-Jul-05 21:04
    Umut Alev25-Jul-05 21:04 
    QuestionHow do you I get attribute value ? Pin
    khmerkidnow29-Jul-04 14:07
    khmerkidnow29-Jul-04 14:07 
    AnswerRe: How do you I get attribute value ? Pin
    dbpradeep19-Mar-09 0:29
    dbpradeep19-Mar-09 0:29 
    Generalmultiple entries of the same name Pin
    burnettb31714-Jul-03 11:58
    burnettb31714-Jul-03 11:58 
    GeneralRe: multiple entries of the same name Pin
    mikeguz14-Oct-05 17:47
    mikeguz14-Oct-05 17:47 
    GeneralNodes have the same name BUG Pin
    9-Apr-03 20:43
    suss9-Apr-03 20:43 
    GeneralRe: Nodes have the same name BUG Pin
    9-Apr-03 20:52
    suss9-Apr-03 20:52 
    Generalpretty print of stream Pin
    fazer777-Feb-03 18:00
    fazer777-Feb-03 18:00 
    Generalattributes Pin
    fazer777-Feb-03 17:56
    fazer777-Feb-03 17:56 
    GeneralBug fix for null nodes Pin
    BenJeremy2-Jan-03 10:06
    BenJeremy2-Jan-03 10:06 
    GeneralRe: Bug fix for null nodes Pin
    BenJeremy6-Jan-03 5:04
    BenJeremy6-Jan-03 5:04 
    GeneralAnoying bug for an xml parser Pin
    yarp21-Nov-02 20:42
    yarp21-Nov-02 20:42 
    GeneralRe: Anoying bug for an xml parser Pin
    yarp21-Nov-02 21:17
    yarp21-Nov-02 21:17 
    GeneralSearch Pin
    7-Feb-02 5:18
    suss7-Feb-02 5:18 
    GeneralRe: Search Pin
    ifgarcia20-Apr-05 21:55
    ifgarcia20-Apr-05 21:55 
    Generalanother bug in XmlParser.h Pin
    27-Jul-01 23:47
    suss27-Jul-01 23:47 
    Questionnotify on end-of-node? Pin
    Chris Losinger28-Mar-01 17:44
    professionalChris Losinger28-Mar-01 17:44 
    AnswerRe: notify on end-of-node? Pin
    gok17-Feb-03 17:11
    professionalgok17-Feb-03 17:11 
    GeneralRe: notify on end-of-node? Pin
    khmerkidnow29-Jul-04 13:50
    khmerkidnow29-Jul-04 13:50 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.