MCPcopy Create free account
hub / github.com/Exiv2/exiv2 / Serialize

Method Serialize

xmpsdk/src/XML_Node.cpp:354–420  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

352//====================
353
354void 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 }

Callers

nothing calls this directly

Calls 8

SerializeOneNodeFunction · 0.85
CollectNamespaceDeclsFunction · 0.85
c_strMethod · 0.80
eraseMethod · 0.45
sizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected