1/* 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#ifndef _xmlbuilder_h_ 12#define _xmlbuilder_h_ 13 14#include <string> 15#include <vector> 16#include "webrtc/libjingle/xmllite/xmlparser.h" 17#include "webrtc/base/scoped_ptr.h" 18 19#ifdef EXPAT_RELATIVE_PATH 20#include "expat.h" 21#else 22#include "third_party/expat/v2_0_1/Source/lib/expat.h" 23#endif // EXPAT_RELATIVE_PATH 24 25namespace buzz { 26 27class XmlElement; 28class XmlParseContext; 29 30 31class XmlBuilder : public XmlParseHandler { 32public: 33 XmlBuilder(); 34 35 static XmlElement * BuildElement(XmlParseContext * pctx, 36 const char * name, const char ** atts); 37 virtual void StartElement(XmlParseContext * pctx, 38 const char * name, const char ** atts); 39 virtual void EndElement(XmlParseContext * pctx, const char * name); 40 virtual void CharacterData(XmlParseContext * pctx, 41 const char * text, int len); 42 virtual void Error(XmlParseContext * pctx, XML_Error); 43 virtual ~XmlBuilder(); 44 45 void Reset(); 46 47 // Take ownership of the built element; second call returns NULL 48 XmlElement * CreateElement(); 49 50 // Peek at the built element without taking ownership 51 XmlElement * BuiltElement(); 52 53private: 54 XmlElement * pelCurrent_; 55 rtc::scoped_ptr<XmlElement> pelRoot_; 56 rtc::scoped_ptr<std::vector<XmlElement*> > pvParents_; 57}; 58 59} 60 61#endif 62