148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org/* 248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * 448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * Use of this source code is governed by a BSD-style license 548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * in the file PATENTS. All contributing project authors may 848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org */ 1048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 1148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#ifndef WEBRTC_LIBJINGLE_XMLLITE_XMLELEMENT_H_ 1248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#define WEBRTC_LIBJINGLE_XMLLITE_XMLELEMENT_H_ 1348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 1448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include <iosfwd> 1548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include <string> 1648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 1748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/libjingle/xmllite/qname.h" 1848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#include "webrtc/base/scoped_ptr.h" 1948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 2048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgnamespace buzz { 2148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 2248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgclass XmlChild; 2348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgclass XmlText; 2448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgclass XmlElement; 2548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgclass XmlAttr; 2648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 2748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgclass XmlChild { 2848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org public: 2948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlChild* NextChild() { return next_child_; } 3048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlChild* NextChild() const { return next_child_; } 3148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 3248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org bool IsText() const { return IsTextImpl(); } 3348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 3448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlElement* AsElement() { return AsElementImpl(); } 3548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlElement* AsElement() const { return AsElementImpl(); } 3648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 3748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlText* AsText() { return AsTextImpl(); } 3848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlText* AsText() const { return AsTextImpl(); } 3948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 4048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 4148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org protected: 4248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlChild() : 4348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org next_child_(NULL) { 4448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 4548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 4648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual bool IsTextImpl() const = 0; 4748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual XmlElement* AsElementImpl() const = 0; 4848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual XmlText* AsTextImpl() const = 0; 4948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 5048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 5148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual ~XmlChild(); 5248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 5348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org private: 5448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org friend class XmlElement; 5548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 5648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlChild(const XmlChild& noimpl); 5748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 5848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlChild* next_child_; 5948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org}; 6048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 6148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgclass XmlText : public XmlChild { 6248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org public: 6348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org explicit XmlText(const std::string& text) : 6448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlChild(), 6548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org text_(text) { 6648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 6748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org explicit XmlText(const XmlText& t) : 6848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlChild(), 6948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org text_(t.text_) { 7048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 7148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org explicit XmlText(const char* cstr, size_t len) : 7248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlChild(), 7348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org text_(cstr, len) { 7448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 7548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual ~XmlText(); 7648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 7748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const std::string& Text() const { return text_; } 7848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void SetText(const std::string& text); 7948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void AddParsedText(const char* buf, int len); 8048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void AddText(const std::string& text); 8148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 8248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org protected: 8348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual bool IsTextImpl() const; 8448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual XmlElement* AsElementImpl() const; 8548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual XmlText* AsTextImpl() const; 8648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 8748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org private: 8848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org std::string text_; 8948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org}; 9048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 9148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgclass XmlAttr { 9248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org public: 9348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlAttr* NextAttr() const { return next_attr_; } 9448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const QName& Name() const { return name_; } 9548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const std::string& Value() const { return value_; } 9648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 9748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org private: 9848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org friend class XmlElement; 9948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 10048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org explicit XmlAttr(const QName& name, const std::string& value) : 10148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org next_attr_(NULL), 10248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org name_(name), 10348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org value_(value) { 10448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 10548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org explicit XmlAttr(const XmlAttr& att) : 10648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org next_attr_(NULL), 10748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org name_(att.name_), 10848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org value_(att.value_) { 10948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 11048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 11148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlAttr* next_attr_; 11248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org QName name_; 11348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org std::string value_; 11448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org}; 11548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 11648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.orgclass XmlElement : public XmlChild { 11748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org public: 11848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org explicit XmlElement(const QName& name); 11948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org explicit XmlElement(const QName& name, bool useDefaultNs); 12048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org explicit XmlElement(const XmlElement& elt); 12148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 12248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual ~XmlElement(); 12348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 12448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const QName& Name() const { return name_; } 12548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void SetName(const QName& name) { name_ = name; } 12648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 12748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const std::string BodyText() const; 12848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void SetBodyText(const std::string& text); 12948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 13048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const QName FirstElementName() const; 13148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 13248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlAttr* FirstAttr(); 13348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlAttr* FirstAttr() const 13448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org { return const_cast<XmlElement *>(this)->FirstAttr(); } 13548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 13648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org // Attr will return an empty string if the attribute isn't there: 13748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org // use HasAttr to test presence of an attribute. 13848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const std::string Attr(const StaticQName& name) const; 13948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const std::string Attr(const QName& name) const; 14048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org bool HasAttr(const StaticQName& name) const; 14148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org bool HasAttr(const QName& name) const; 14248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void SetAttr(const QName& name, const std::string& value); 14348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void ClearAttr(const QName& name); 14448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 14548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlChild* FirstChild(); 14648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlChild* FirstChild() const { 14748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return const_cast<XmlElement *>(this)->FirstChild(); 14848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 14948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 15048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlElement* FirstElement(); 15148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlElement* FirstElement() const { 15248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return const_cast<XmlElement *>(this)->FirstElement(); 15348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 15448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 15548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlElement* NextElement(); 15648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlElement* NextElement() const { 15748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return const_cast<XmlElement *>(this)->NextElement(); 15848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 15948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 16048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlElement* FirstWithNamespace(const std::string& ns); 16148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlElement* FirstWithNamespace(const std::string& ns) const { 16248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return const_cast<XmlElement *>(this)->FirstWithNamespace(ns); 16348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 16448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 16548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlElement* NextWithNamespace(const std::string& ns); 16648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlElement* NextWithNamespace(const std::string& ns) const { 16748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return const_cast<XmlElement *>(this)->NextWithNamespace(ns); 16848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 16948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 17048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlElement* FirstNamed(const StaticQName& name); 17148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlElement* FirstNamed(const StaticQName& name) const { 17248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return const_cast<XmlElement *>(this)->FirstNamed(name); 17348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 17448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 17548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlElement* FirstNamed(const QName& name); 17648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlElement* FirstNamed(const QName& name) const { 17748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return const_cast<XmlElement *>(this)->FirstNamed(name); 17848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 17948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 18048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlElement* NextNamed(const StaticQName& name); 18148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlElement* NextNamed(const StaticQName& name) const { 18248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return const_cast<XmlElement *>(this)->NextNamed(name); 18348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 18448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 18548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlElement* NextNamed(const QName& name); 18648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const XmlElement* NextNamed(const QName& name) const { 18748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org return const_cast<XmlElement *>(this)->NextNamed(name); 18848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org } 18948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 19048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org // Finds the first element named 'name'. If that element can't be found then 19148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org // adds one and returns it. 19248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlElement* FindOrAddNamedChild(const QName& name); 19348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 19448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org const std::string TextNamed(const QName& name) const; 19548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 19648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void InsertChildAfter(XmlChild* predecessor, XmlChild* new_child); 19748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void RemoveChildAfter(XmlChild* predecessor); 19848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 19948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void AddParsedText(const char* buf, int len); 20048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org // Note: CDATA is not supported by XMPP, therefore using this function will 20148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org // generate non-XMPP compatible XML. 20248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void AddCDATAText(const char* buf, int len); 20348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void AddText(const std::string& text); 20448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void AddText(const std::string& text, int depth); 20548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void AddElement(XmlElement* child); 20648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void AddElement(XmlElement* child, int depth); 20748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void AddAttr(const QName& name, const std::string& value); 20848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void AddAttr(const QName& name, const std::string& value, int depth); 20948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void ClearNamedChildren(const QName& name); 21048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void ClearAttributes(); 21148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org void ClearChildren(); 21248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 21348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org static XmlElement* ForStr(const std::string& str); 21448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org std::string Str() const; 21548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 21648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org bool IsCDATA() const { return cdata_; } 21748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 21848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org protected: 21948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual bool IsTextImpl() const; 22048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual XmlElement* AsElementImpl() const; 22148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org virtual XmlText* AsTextImpl() const; 22248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 22348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org private: 22448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org QName name_; 22548a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlAttr* first_attr_; 22648a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlAttr* last_attr_; 22748a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlChild* first_child_; 22848a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org XmlChild* last_child_; 22948a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org bool cdata_; 23048a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org}; 23148a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 23248a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org} // namespace buzz 23348a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org 23448a7b2e84057589be933b5182cded67c9885f8e8henrike@webrtc.org#endif // WEBRTC_LIBJINGLE_XMLLITE_XMLELEMENT_H_ 235