15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org/* 25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * libjingle 35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Copyright 2004--2005, Google Inc. 45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * Redistribution and use in source and binary forms, with or without 65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * modification, are permitted provided that the following conditions are met: 75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer. 105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * this list of conditions and the following disclaimer in the documentation 125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * and/or other materials provided with the distribution. 135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 3. The name of the author may not be used to endorse or promote products 145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * derived from this software without specific prior written permission. 155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * 165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org */ 275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmllite/xmlelement.h" 295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <ostream> 315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <sstream> 325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <string> 335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include <vector> 345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/common.h" 365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmllite/qname.h" 375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmllite/xmlparser.h" 385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmllite/xmlbuilder.h" 395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmllite/xmlprinter.h" 405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/xmllite/xmlconstants.h" 415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace buzz { 435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlChild::~XmlChild() { 455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgbool XmlText::IsTextImpl() const { 485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement* XmlText::AsElementImpl() const { 525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlText* XmlText::AsTextImpl() const { 565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return const_cast<XmlText *>(this); 575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlText::SetText(const std::string& text) { 605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org text_ = text; 615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlText::AddParsedText(const char* buf, int len) { 645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org text_.append(buf, len); 655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlText::AddText(const std::string& text) { 685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org text_ += text; 695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlText::~XmlText() { 725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement::XmlElement(const QName& name) : 755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org name_(name), 765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_attr_(NULL), 775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_attr_(NULL), 785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_child_(NULL), 795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_child_(NULL), 805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cdata_(false) { 815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement::XmlElement(const XmlElement& elt) : 845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild(), 855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org name_(elt.name_), 865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_attr_(NULL), 875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_attr_(NULL), 885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_child_(NULL), 895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_child_(NULL), 905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cdata_(false) { 915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // copy attributes 935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* attr; 945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr ** plast_attr = &first_attr_; 955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* newAttr = NULL; 965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (attr = elt.first_attr_; attr; attr = attr->NextAttr()) { 975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org newAttr = new XmlAttr(*attr); 985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *plast_attr = newAttr; 995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org plast_attr = &(newAttr->next_attr_); 1005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_attr_ = newAttr; 1025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // copy children 1045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pChild; 1055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild ** ppLast = &first_child_; 1065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* newChild = NULL; 1075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pChild = elt.first_child_; pChild; pChild = pChild->NextChild()) { 1095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (pChild->IsText()) { 1105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org newChild = new XmlText(*(pChild->AsText())); 1115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } else { 1125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org newChild = new XmlElement(*(pChild->AsElement())); 1135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *ppLast = newChild; 1155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ppLast = &(newChild->next_child_); 1165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_child_ = newChild; 1185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cdata_ = elt.cdata_; 1205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement::XmlElement(const QName& name, bool useDefaultNs) : 1235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org name_(name), 1245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_attr_(useDefaultNs ? new XmlAttr(QN_XMLNS, name.Namespace()) : NULL), 1255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_attr_(first_attr_), 1265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_child_(NULL), 1275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_child_(NULL), 1285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cdata_(false) { 1295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgbool XmlElement::IsTextImpl() const { 1325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return false; 1335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement* XmlElement::AsElementImpl() const { 1365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return const_cast<XmlElement *>(this); 1375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlText* XmlElement::AsTextImpl() const { 1405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 1415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgconst std::string XmlElement::BodyText() const { 1445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (first_child_ && first_child_->IsText() && last_child_ == first_child_) { 1455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return first_child_->AsText()->Text(); 1465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return std::string(); 1495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::SetBodyText(const std::string& text) { 1525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (text.empty()) { 1535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ClearChildren(); 1545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } else if (first_child_ == NULL) { 1555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org AddText(text); 1565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } else if (first_child_->IsText() && last_child_ == first_child_) { 1575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_child_->AsText()->SetText(text); 1585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } else { 1595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ClearChildren(); 1605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org AddText(text); 1615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgconst QName XmlElement::FirstElementName() const { 1655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org const XmlElement* element = FirstElement(); 1665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (element == NULL) 1675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return QName(); 1685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return element->Name(); 1695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlAttr* XmlElement::FirstAttr() { 1725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return first_attr_; 1735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgconst std::string XmlElement::Attr(const StaticQName& name) const { 1765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* attr; 1775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (attr = first_attr_; attr; attr = attr->next_attr_) { 1785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (attr->name_ == name) 1795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return attr->value_; 1805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return std::string(); 1825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgconst std::string XmlElement::Attr(const QName& name) const { 1855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* attr; 1865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (attr = first_attr_; attr; attr = attr->next_attr_) { 1875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (attr->name_ == name) 1885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return attr->value_; 1895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return std::string(); 1915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 1925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 1935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgbool XmlElement::HasAttr(const StaticQName& name) const { 1945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* attr; 1955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (attr = first_attr_; attr; attr = attr->next_attr_) { 1965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (attr->name_ == name) 1975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 1985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 1995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return false; 2005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgbool XmlElement::HasAttr(const QName& name) const { 2035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* attr; 2045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (attr = first_attr_; attr; attr = attr->next_attr_) { 2055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (attr->name_ == name) 2065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 2075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return false; 2095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::SetAttr(const QName& name, const std::string& value) { 2125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* attr; 2135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (attr = first_attr_; attr; attr = attr->next_attr_) { 2145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (attr->name_ == name) 2155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org break; 2165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!attr) { 2185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org attr = new XmlAttr(name, value); 2195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (last_attr_) 2205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_attr_->next_attr_ = attr; 2215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org else 2225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_attr_ = attr; 2235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_attr_ = attr; 2245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return; 2255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org attr->value_ = value; 2275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::ClearAttr(const QName& name) { 2305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* attr; 2315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* last_attr = NULL; 2325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (attr = first_attr_; attr; attr = attr->next_attr_) { 2335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (attr->name_ == name) 2345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org break; 2355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_attr = attr; 2365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!attr) 2385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return; 2395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!last_attr) 2405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_attr_ = attr->next_attr_; 2415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org else 2425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_attr->next_attr_ = attr->next_attr_; 2435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (last_attr_ == attr) 2445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_attr_ = last_attr; 2455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org delete attr; 2465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlChild* XmlElement::FirstChild() { 2495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return first_child_; 2505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement* XmlElement::FirstElement() { 2535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pChild; 2545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pChild = first_child_; pChild; pChild = pChild->next_child_) { 2555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!pChild->IsText()) 2565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return pChild->AsElement(); 2575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 2595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement* XmlElement::NextElement() { 2625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pChild; 2635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pChild = next_child_; pChild; pChild = pChild->next_child_) { 2645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!pChild->IsText()) 2655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return pChild->AsElement(); 2665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 2685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement* XmlElement::FirstWithNamespace(const std::string& ns) { 2715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pChild; 2725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pChild = first_child_; pChild; pChild = pChild->next_child_) { 2735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!pChild->IsText() && pChild->AsElement()->Name().Namespace() == ns) 2745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return pChild->AsElement(); 2755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 2775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement * 2805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement::NextWithNamespace(const std::string& ns) { 2815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pChild; 2825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pChild = next_child_; pChild; pChild = pChild->next_child_) { 2835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!pChild->IsText() && pChild->AsElement()->Name().Namespace() == ns) 2845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return pChild->AsElement(); 2855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 2875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement * 2905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement::FirstNamed(const QName& name) { 2915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pChild; 2925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pChild = first_child_; pChild; pChild = pChild->next_child_) { 2935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!pChild->IsText() && pChild->AsElement()->Name() == name) 2945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return pChild->AsElement(); 2955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 2965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 2975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 2985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 2995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement * 3005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement::FirstNamed(const StaticQName& name) { 3015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pChild; 3025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pChild = first_child_; pChild; pChild = pChild->next_child_) { 3035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!pChild->IsText() && pChild->AsElement()->Name() == name) 3045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return pChild->AsElement(); 3055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 3075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 3085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement * 3105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement::NextNamed(const QName& name) { 3115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pChild; 3125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pChild = next_child_; pChild; pChild = pChild->next_child_) { 3135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!pChild->IsText() && pChild->AsElement()->Name() == name) 3145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return pChild->AsElement(); 3155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 3175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 3185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement * 3205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement::NextNamed(const StaticQName& name) { 3215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pChild; 3225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pChild = next_child_; pChild; pChild = pChild->next_child_) { 3235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!pChild->IsText() && pChild->AsElement()->Name() == name) 3245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return pChild->AsElement(); 3255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return NULL; 3275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 3285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement* XmlElement::FindOrAddNamedChild(const QName& name) { 3305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlElement* child = FirstNamed(name); 3315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!child) { 3325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org child = new XmlElement(name); 3335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org AddElement(child); 3345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return child; 3375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 3385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgconst std::string XmlElement::TextNamed(const QName& name) const { 3405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pChild; 3415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pChild = first_child_; pChild; pChild = pChild->next_child_) { 3425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!pChild->IsText() && pChild->AsElement()->Name() == name) 3435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return pChild->AsElement()->BodyText(); 3445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return std::string(); 3465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 3475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::InsertChildAfter(XmlChild* predecessor, XmlChild* next) { 3495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (predecessor == NULL) { 3505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org next->next_child_ = first_child_; 3515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_child_ = next; 3525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org else { 3545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org next->next_child_ = predecessor->next_child_; 3555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org predecessor->next_child_ = next; 3565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 3585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::RemoveChildAfter(XmlChild* predecessor) { 3605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* next; 3615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (predecessor == NULL) { 3635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org next = first_child_; 3645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_child_ = next->next_child_; 3655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org else { 3675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org next = predecessor->next_child_; 3685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org predecessor->next_child_ = next->next_child_; 3695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (last_child_ == next) 3725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_child_ = predecessor; 3735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org delete next; 3755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 3765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::AddAttr(const QName& name, const std::string& value) { 3785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ASSERT(!HasAttr(name)); 3795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr ** pprev = last_attr_ ? &(last_attr_->next_attr_) : &first_attr_; 3815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_attr_ = (*pprev = new XmlAttr(name, value)); 3825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 3835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::AddAttr(const QName& name, const std::string& value, 3855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org int depth) { 3865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlElement* element = this; 3875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org while (depth--) { 3885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org element = element->last_child_->AsElement(); 3895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 3905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org element->AddAttr(name, value); 3915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 3925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::AddParsedText(const char* cstr, int len) { 3945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (len == 0) 3955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return; 3965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 3975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (last_child_ && last_child_->IsText()) { 3985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_child_->AsText()->AddParsedText(cstr, len); 3995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return; 4005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 4015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild ** pprev = last_child_ ? &(last_child_->next_child_) : &first_child_; 4025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_child_ = *pprev = new XmlText(cstr, len); 4035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::AddCDATAText(const char* buf, int len) { 4065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org cdata_ = true; 4075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org AddParsedText(buf, len); 4085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::AddText(const std::string& text) { 4115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (text == STR_EMPTY) 4125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return; 4135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (last_child_ && last_child_->IsText()) { 4155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_child_->AsText()->AddText(text); 4165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return; 4175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 4185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild ** pprev = last_child_ ? &(last_child_->next_child_) : &first_child_; 4195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_child_ = *pprev = new XmlText(text); 4205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::AddText(const std::string& text, int depth) { 4235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // note: the first syntax is ambigious for msvc 6 4245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // XmlElement* pel(this); 4255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlElement* element = this; 4265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org while (depth--) { 4275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org element = element->last_child_->AsElement(); 4285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 4295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org element->AddText(text); 4305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::AddElement(XmlElement *child) { 4335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (child == NULL) 4345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return; 4355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild ** pprev = last_child_ ? &(last_child_->next_child_) : &first_child_; 4375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org *pprev = child; 4385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org last_child_ = child; 4395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org child->next_child_ = NULL; 4405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::AddElement(XmlElement *child, int depth) { 4435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlElement* element = this; 4445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org while (depth--) { 4455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org element = element->last_child_->AsElement(); 4465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 4475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org element->AddElement(child); 4485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::ClearNamedChildren(const QName& name) { 4515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* prev_child = NULL; 4525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* next_child; 4535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* child; 4545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (child = FirstChild(); child; child = next_child) { 4555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org next_child = child->NextChild(); 4565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!child->IsText() && child->AsElement()->Name() == name) 4575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org { 4585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org RemoveChildAfter(prev_child); 4595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org continue; 4605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 4615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org prev_child = child; 4625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 4635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::ClearAttributes() { 4665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* attr; 4675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (attr = first_attr_; attr; ) { 4685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* to_delete = attr; 4695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org attr = attr->next_attr_; 4705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org delete to_delete; 4715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 4725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_attr_ = last_attr_ = NULL; 4735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgvoid XmlElement::ClearChildren() { 4765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pchild; 4775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pchild = first_child_; pchild; ) { 4785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* to_delete = pchild; 4795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org pchild = pchild->next_child_; 4805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org delete to_delete; 4815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 4825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org first_child_ = last_child_ = NULL; 4835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstd::string XmlElement::Str() const { 4865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org std::stringstream ss; 4875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlPrinter::PrintXml(&ss, this); 4885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return ss.str(); 4895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement* XmlElement::ForStr(const std::string& str) { 4925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlBuilder builder; 4935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlParser::ParseXml(&builder, str); 4945976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return builder.CreateElement(); 4955976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 4965976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 4975976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgXmlElement::~XmlElement() { 4985976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* attr; 4995976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (attr = first_attr_; attr; ) { 5005976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlAttr* to_delete = attr; 5015976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org attr = attr->next_attr_; 5025976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org delete to_delete; 5035976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 5045976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 5055976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* pchild; 5065976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org for (pchild = first_child_; pchild; ) { 5075976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org XmlChild* to_delete = pchild; 5085976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org pchild = pchild->next_child_; 5095976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org delete to_delete; 5105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 5115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 5125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 5135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} // namespace buzz 514