1f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch/* 2f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * libjingle 3f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * Copyright 2004--2005, Google Inc. 4f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 5f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * Redistribution and use in source and binary forms, with or without 6f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * modification, are permitted provided that the following conditions are met: 7f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 8f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 1. Redistributions of source code must retain the above copyright notice, 9f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * this list of conditions and the following disclaimer. 10f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright notice, 11f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * this list of conditions and the following disclaimer in the documentation 12f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * and/or other materials provided with the distribution. 13f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 3. The name of the author may not be used to endorse or promote products 14f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * derived from this software without specific prior written permission. 15f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 16f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch */ 27f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 28f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifndef _xmlelement_h_ 29f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#define _xmlelement_h_ 30f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 31f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include <iosfwd> 32f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include <string> 33f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include "talk/base/scoped_ptr.h" 34f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include "talk/xmllite/qname.h" 35f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 36f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochnamespace buzz { 37f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 38f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochextern const QName QN_EMPTY; 39f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochextern const QName QN_XMLNS; 40f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 41f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 42f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass XmlChild; 43f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass XmlText; 44f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass XmlElement; 45f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass XmlAttr; 46f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 47f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass XmlChild { 48f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochfriend class XmlElement; 49f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 50f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochpublic: 51f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 52f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlChild * NextChild() { return pNextChild_; } 53f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlChild * NextChild() const { return pNextChild_; } 54f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 55f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool IsText() const { return IsTextImpl(); } 56f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 57f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlElement * AsElement() { return AsElementImpl(); } 58f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlElement * AsElement() const { return AsElementImpl(); } 59f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 60f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlText * AsText() { return AsTextImpl(); } 61f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlText * AsText() const { return AsTextImpl(); } 62f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 63f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 64f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochprotected: 65f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 66f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlChild() : 67f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pNextChild_(NULL) { 68f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 69f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 70f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual bool IsTextImpl() const = 0; 71f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual XmlElement * AsElementImpl() const = 0; 72f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual XmlText * AsTextImpl() const = 0; 73f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 74f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 75f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~XmlChild(); 76f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 77f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochprivate: 78f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlChild(const XmlChild & noimpl); 79f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 80f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlChild * pNextChild_; 81f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 82f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch}; 83f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 84f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass XmlText : public XmlChild { 85f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochpublic: 86f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch explicit XmlText(const std::string & text) : 87f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlChild(), 88f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch text_(text) { 89f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 90f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch explicit XmlText(const XmlText & t) : 91f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlChild(), 92f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch text_(t.text_) { 93f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 94f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch explicit XmlText(const char * cstr, size_t len) : 95f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlChild(), 96f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch text_(cstr, len) { 97f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 98f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~XmlText(); 99f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 100f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const std::string & Text() const { return text_; } 101f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void SetText(const std::string & text); 102f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void AddParsedText(const char * buf, int len); 103f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void AddText(const std::string & text); 104f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 105f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochprotected: 106f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual bool IsTextImpl() const; 107f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual XmlElement * AsElementImpl() const; 108f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual XmlText * AsTextImpl() const; 109f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 110f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochprivate: 111f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string text_; 112f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch}; 113f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 114f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass XmlAttr { 115f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochfriend class XmlElement; 116f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 117f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochpublic: 118f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlAttr * NextAttr() const { return pNextAttr_; } 119f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const QName & Name() const { return name_; } 120f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const std::string & Value() const { return value_; } 121f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 122f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochprivate: 123f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch explicit XmlAttr(const QName & name, const std::string & value) : 124f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pNextAttr_(NULL), 125f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch name_(name), 126f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch value_(value) { 127f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 128f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch explicit XmlAttr(const XmlAttr & att) : 129f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch pNextAttr_(NULL), 130f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch name_(att.name_), 131f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch value_(att.value_) { 132f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 133f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 134f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlAttr * pNextAttr_; 135f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch QName name_; 136f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string value_; 137f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch}; 138f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 139f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochclass XmlElement : public XmlChild { 140f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochpublic: 141f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch explicit XmlElement(const QName & name); 142f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch explicit XmlElement(const QName & name, bool useDefaultNs); 143f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch explicit XmlElement(const XmlElement & elt); 144f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 145f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual ~XmlElement(); 146f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 147f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const QName& Name() const { return name_; } 148f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void SetName(const QName& name) { name_ = name; } 149f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 150f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const std::string & BodyText() const; 151f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void SetBodyText(const std::string & text); 152f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 153f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const QName & FirstElementName() const; 154f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 155f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlAttr * FirstAttr(); 156f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlAttr * FirstAttr() const 157f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { return const_cast<XmlElement *>(this)->FirstAttr(); } 158f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 159f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch //! Attr will return STR_EMPTY if the attribute isn't there: 160f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch //! use HasAttr to test presence of an attribute. 161f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const std::string & Attr(const QName & name) const; 162f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool HasAttr(const QName & name) const; 163f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void SetAttr(const QName & name, const std::string & value); 164f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void ClearAttr(const QName & name); 165f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 166f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlChild * FirstChild(); 167f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlChild * FirstChild() const 168f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { return const_cast<XmlElement *>(this)->FirstChild(); } 169f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 170f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlElement * FirstElement(); 171f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlElement * FirstElement() const 172f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { return const_cast<XmlElement *>(this)->FirstElement(); } 173f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 174f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlElement * NextElement(); 175f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlElement * NextElement() const 176f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { return const_cast<XmlElement *>(this)->NextElement(); } 177f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 178f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlElement * FirstWithNamespace(const std::string & ns); 179f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlElement * FirstWithNamespace(const std::string & ns) const 180f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { return const_cast<XmlElement *>(this)->FirstWithNamespace(ns); } 181f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 182f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlElement * NextWithNamespace(const std::string & ns); 183f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlElement * NextWithNamespace(const std::string & ns) const 184f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { return const_cast<XmlElement *>(this)->NextWithNamespace(ns); } 185f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 186f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlElement * FirstNamed(const QName & name); 187f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlElement * FirstNamed(const QName & name) const 188f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { return const_cast<XmlElement *>(this)->FirstNamed(name); } 189f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 190f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlElement * NextNamed(const QName & name); 191f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const XmlElement * NextNamed(const QName & name) const 192f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch { return const_cast<XmlElement *>(this)->NextNamed(name); } 193f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 194f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Finds the first element named 'name'. If that element can't be found then 195f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // adds one and returns it. 196f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlElement* FindOrAddNamedChild(const QName& name); 197f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 198f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch const std::string & TextNamed(const QName & name) const; 199f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 200f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void InsertChildAfter(XmlChild * pPredecessor, XmlChild * pNewChild); 201f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void RemoveChildAfter(XmlChild * pPredecessor); 202f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 203f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void AddParsedText(const char * buf, int len); 204f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Note: CDATA is not supported by XMPP, therefore using this function will 205f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // generate non-XMPP compatible XML. 206f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void AddCDATAText(const char * buf, int len); 207f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void AddText(const std::string & text); 208f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void AddText(const std::string & text, int depth); 209f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void AddElement(XmlElement * pelChild); 210f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void AddElement(XmlElement * pelChild, int depth); 211f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void AddAttr(const QName & name, const std::string & value); 212f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void AddAttr(const QName & name, const std::string & value, int depth); 213f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void ClearNamedChildren(const QName & name); 214f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void ClearAttributes(); 215f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void ClearChildren(); 216f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 217f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch static XmlElement * ForStr(const std::string & str); 218f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string Str() const; 219f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 220f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch void Print(std::ostream * pout, std::string xmlns[], int xmlnsCount) const; 221f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 222f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool IsCDATA() const { return cdata_; } 223f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 224f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochprotected: 225f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual bool IsTextImpl() const; 226f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual XmlElement * AsElementImpl() const; 227f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch virtual XmlText * AsTextImpl() const; 228f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 229f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochprivate: 230f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch QName name_; 231f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlAttr * pFirstAttr_; 232f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlAttr * pLastAttr_; 233f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlChild * pFirstChild_; 234f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch XmlChild * pLastChild_; 235f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool cdata_; 236f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch}; 237f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 238f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch} 239f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif 240