| 352 | //==================== |
| 353 | |
| 354 | void XML_Node::Serialize ( std::string * buffer ) |
| 355 | { |
| 356 | buffer->erase(); |
| 357 | |
| 358 | if ( this->kind != kRootNode ) { |
| 359 | |
| 360 | SerializeOneNode ( buffer, *this ); |
| 361 | |
| 362 | } else { |
| 363 | |
| 364 | // Do the outermost level here, in order to add the XML version and namespace declarations. |
| 365 | |
| 366 | *buffer += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; |
| 367 | |
| 368 | for ( size_t outer = 0, oLimit = this->content.size(); outer < oLimit; ++outer ) { |
| 369 | |
| 370 | const XML_Node & node = *this->content[outer]; |
| 371 | |
| 372 | if ( node.kind != kElemNode ) { |
| 373 | |
| 374 | SerializeOneNode ( buffer, node ); |
| 375 | |
| 376 | } else { |
| 377 | |
| 378 | XMP_StringPtr namePtr = node.name.c_str(); |
| 379 | if ( XMP_LitNMatch ( namePtr, "_dflt_:", 7 ) ) namePtr += 7; // Hack for default namespaces. |
| 380 | |
| 381 | *buffer += '<'; |
| 382 | *buffer += namePtr; |
| 383 | |
| 384 | NamespaceMap nsMap; |
| 385 | CollectNamespaceDecls ( &nsMap, node ); |
| 386 | NamespaceMap::iterator nsDecl = nsMap.begin(); |
| 387 | NamespaceMap::iterator nsEnd = nsMap.end(); |
| 388 | for ( ; nsDecl != nsEnd; ++nsDecl ) { |
| 389 | const std::string & prefix = nsDecl->first; |
| 390 | *buffer += " xmlns"; |
| 391 | if ( prefix != "_dflt_" ) { *buffer += ':'; *buffer += prefix; } |
| 392 | *buffer += "=\""; |
| 393 | *buffer += nsDecl->second; |
| 394 | *buffer += '"'; |
| 395 | } |
| 396 | |
| 397 | for ( size_t attr = 0, aLimit = node.attrs.size(); attr < aLimit; ++attr ) { |
| 398 | SerializeOneNode ( buffer, *node.attrs[attr] ); |
| 399 | } |
| 400 | |
| 401 | if ( node.content.empty() ) { |
| 402 | *buffer += "/>"; |
| 403 | } else { |
| 404 | *buffer += '>'; |
| 405 | for ( size_t child = 0, cLimit = node.content.size(); child < cLimit; ++child ) { |
| 406 | SerializeOneNode ( buffer, *node.content[child] ); |
| 407 | } |
| 408 | *buffer += "</"; |
| 409 | *buffer += namePtr; |
| 410 | *buffer += '>'; |
| 411 | } |
nothing calls this directly
no test coverage detected