static void storeNode( const XmlNode* node, int depth, std::ostream& out ) { out << std::fixed; // always use fixed notation for( int k=0; k<depth*INDENT; k++ ) out << " "; if ( node->isElement() ) { XmlElement* e = (XmlElement*)node; out << "<" << e->getName(); for( XmlAttributes::iterator a = e->getAttrs().begin(); a != e->getAttrs().end(); a++ ) { out << " " << a->first << "=" << "\"" << a->second << "\""; } out << ">" << std::endl; for( XmlNodeList::iterator i = e->getChildren().begin(); i != e->getChildren().end(); i++ ) { storeNode( i->get(), depth+1, out ); } for( int k=0; k<depth*INDENT; k++ ) out << " "; out << "</" << e->getName() << ">" << std::endl; } else if ( node->isText() ) { XmlText* t = (XmlText*)node; const std::string& text = t->getValue(); if ( text.find_first_of( "<&" ) != std::string::npos ) out << "<![CDATA[" << text << "]]>" << std::endl; else out << text << std::endl; } }
static void storeNode( const XmlNode* node, TiXmlNode* parent) { if (node->isElement()) { XmlElement* e = (XmlElement*)node; TiXmlElement* element = new TiXmlElement( e->getName().c_str() ); //Write out all the attributes for( XmlAttributes::iterator a = e->getAttrs().begin(); a != e->getAttrs().end(); a++ ) { element->SetAttribute(a->first.c_str(), a->second.c_str() ); } //Write out all the child nodes for( XmlNodeList::iterator i = e->getChildren().begin(); i != e->getChildren().end(); i++ ) { storeNode( i->get(), element ); } parent->LinkEndChild( element ); } else if (node->isText()) { XmlText* t = (XmlText*)node; parent->LinkEndChild( new TiXmlText( t->getValue().c_str() ) ); } }
void XmlElement::addSubElement(const std::string& tag, const std::string& text) { XmlElement* ele = new XmlElement(tag); ele->getChildren().push_back(new XmlText(text)); children.push_back(ele); }
void XmlElement::addSubElement(const std::string& tag, const Properties& attrs, const std::string& text) { XmlElement* ele = new XmlElement(tag); for( Properties::const_iterator i = attrs.begin(); i != attrs.end(); i++ ) ele->attrs[i->first] = i->second; ele->getChildren().push_back(new XmlText(text)); children.push_back(ele); }
static void XMLCALL handleCharData( void* user_data, const XML_Char* c_data, int len ) { if ( len > 0 ) { XmlElementNoRefStack& stack = *(XmlElementNoRefStack*)user_data; XmlElement* top = stack.top(); std::string data( c_data, len ); top->getChildren().push_back( new XmlText( data ) ); } }
static void XMLCALL startElement( void* user_data, const XML_Char* c_tag, const XML_Char** c_attrs ) { XmlElementNoRefStack& stack = *(XmlElementNoRefStack*)user_data; XmlElement* top = stack.top(); std::string tag( c_tag ); std::transform( tag.begin(), tag.end(), tag.begin(), tolower ); XmlAttributes attrs = getAttributes( c_attrs ); XmlElement* new_element = new XmlElement( tag, attrs ); top->getChildren().push_back( new_element ); stack.push( new_element ); }
static void storeNode( XmlNode* node, int depth, std::ostream& out ) { for( int k=0; k<depth*INDENT; k++ ) out << " "; if ( node->isElement() ) { XmlElement* e = (XmlElement*)node; out << "<" << e->getName(); for( XmlAttributes::iterator a = e->getAttrs().begin(); a != e->getAttrs().end(); a++ ) { out << " " << a->first << "=" << "\"" << a->second << "\""; } if ( e->getChildren().empty()) { out << "/>" << std::endl; } else { out << ">" << std::endl; for( XmlNodeList::iterator i = e->getChildren().begin(); i != e->getChildren().end(); i++ ) { storeNode( i->get(), depth+1, out ); } for( int k=0; k<depth*INDENT; k++ ) out << " "; out << "</" << e->getName() << ">" << std::endl; } } else if ( node->isText() ) { XmlText* t = (XmlText*)node; out << t->getValue() << std::endl; } }