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 25 namespace buzz { 26 27 class XmlElement; 28 class XmlParseContext; 29 30 31 class XmlBuilder : public XmlParseHandler { 32 public: 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 53 private: 54 XmlElement * pelCurrent_; 55 rtc::scoped_ptr<XmlElement> pelRoot_; 56 rtc::scoped_ptr<std::vector<XmlElement*> > pvParents_; 57 }; 58 59 } 60 61 #endif 62