libzypp  17.14.0
zypp::xmlout::Node Class Reference

RAII writing a nodes start/end tag. More...

#include <Xml.h>

Classes

struct  HasContentException
 Exception type thrown if attributes are added to a closed start node. More...
 
struct  OptionalContentType
 Ctor arg type. More...
 

Public Types

typedef NodeAttr Attr
 

Public Member Functions

 NON_COPYABLE_BUT_MOVE (Node)
 
 Node (std::ostream &out_r, std::string name_r, const std::initializer_list< Attr > &attrs_r={})
 Ctor taking nodename and attribute list. More...
 
 Node (std::ostream &out_r, std::string name_r, Attr attr_r)
 Convenience ctor for one attribute pair. More...
 
 Node (std::ostream &out_r, std::string name_r, OptionalContentType, const std::initializer_list< Attr > &attrs_r={})
 Optional content ctor taking nodename and attribute list. More...
 
 Node (std::ostream &out_r, std::string name_r, OptionalContentType, Attr attr_r)
 Optional content Convenience ctor for one attribute pair. More...
 
 ~Node ()
 Dtor wrting end tag. More...
 
NodeaddAttr (const std::initializer_list< Attr > &attrs_r={})
 Add additional attributes (requires OptionalContentType) More...
 
NodeaddAttr (const Attr &attr_r)
 
std::ostream & operator * ()
 Return the output stream. More...
 

Static Public Attributes

static constexpr OptionalContentType optionalContent = OptionalContentType()
 

Private Member Functions

void printStart (const std::initializer_list< Attr > &attrs_r)
 
void printAttr (const std::initializer_list< Attr > &attrs_r)
 
bool isComment () const
 

Private Attributes

std::ostream & _out
 
std::string _name
 
bool _hasContent
 

Related Functions

(Note that these are not member functions.)

std::ostream & node (std::ostream &out_r, const std::string &name_r, const std::initializer_list< Node::Attr > &attrs_r={})
 

Detailed Description

RAII writing a nodes start/end tag.

{
Node node( std::cout, "node", { "attr", "val" } ); // <node attr="val">
*node << "write nodes body...."
} // </node>
Note
If the optionalContent flag is passed to the ctor, the start node is kept open, until the first call to operator*. The start node is closed before returning the stream.
{
Node node( std::cout, "node", Node::optionalContent, { "attr", "val" } );
// <node attr="val"
} // />
{
Node node( std::cout, "node", Node::optionalContent, { "attr", "val" } );
// <node attr="val"
*node << "write nodes body...." // />write nodes body...
} // </node>
If the nodename is empty or starts with an !, a comment is written.

Definition at line 84 of file Xml.h.

Member Typedef Documentation

◆ Attr

Definition at line 87 of file Xml.h.

Constructor & Destructor Documentation

◆ Node() [1/4]

zypp::xmlout::Node::Node ( std::ostream &  out_r,
std::string  name_r,
const std::initializer_list< Attr > &  attrs_r = {} 
)
inline

Ctor taking nodename and attribute list.

Definition at line 93 of file Xml.h.

◆ Node() [2/4]

zypp::xmlout::Node::Node ( std::ostream &  out_r,
std::string  name_r,
Attr  attr_r 
)
inline

Convenience ctor for one attribute pair.

Definition at line 98 of file Xml.h.

◆ Node() [3/4]

zypp::xmlout::Node::Node ( std::ostream &  out_r,
std::string  name_r,
OptionalContentType  ,
const std::initializer_list< Attr > &  attrs_r = {} 
)
inline

Optional content ctor taking nodename and attribute list.

Definition at line 103 of file Xml.h.

◆ Node() [4/4]

zypp::xmlout::Node::Node ( std::ostream &  out_r,
std::string  name_r,
OptionalContentType  ,
Attr  attr_r 
)
inline

Optional content Convenience ctor for one attribute pair.

Definition at line 108 of file Xml.h.

◆ ~Node()

zypp::xmlout::Node::~Node ( )
inline

Dtor wrting end tag.

Definition at line 113 of file Xml.h.

Member Function Documentation

◆ NON_COPYABLE_BUT_MOVE()

zypp::xmlout::Node::NON_COPYABLE_BUT_MOVE ( Node  )

◆ addAttr() [1/2]

Node& zypp::xmlout::Node::addAttr ( const std::initializer_list< Attr > &  attrs_r = {})
inline

Add additional attributes (requires OptionalContentType)

Exceptions
HasContentExceptionIf start node is already closed

Definition at line 132 of file Xml.h.

◆ addAttr() [2/2]

Node& zypp::xmlout::Node::addAttr ( const Attr attr_r)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 141 of file Xml.h.

◆ operator *()

std::ostream& zypp::xmlout::Node::operator * ( )
inline

Return the output stream.

Definition at line 146 of file Xml.h.

◆ printStart()

void zypp::xmlout::Node::printStart ( const std::initializer_list< Attr > &  attrs_r)
inlineprivate

Definition at line 160 of file Xml.h.

◆ printAttr()

void zypp::xmlout::Node::printAttr ( const std::initializer_list< Attr > &  attrs_r)
inlineprivate

Definition at line 176 of file Xml.h.

◆ isComment()

bool zypp::xmlout::Node::isComment ( ) const
inlineprivate

Definition at line 182 of file Xml.h.

Friends And Related Function Documentation

◆ node()

std::ostream & node ( std::ostream &  out_r,
const std::string &  name_r,
const std::initializer_list< Node::Attr > &  attrs_r = {} 
)
related

Write a leaf node without PCDATA

<node attr="val"/>

Definition at line 197 of file Xml.h.

Member Data Documentation

◆ optionalContent

constexpr Node::OptionalContentType zypp::xmlout::Node::optionalContent = OptionalContentType()
static

Definition at line 90 of file Xml.h.

◆ _out

std::ostream& zypp::xmlout::Node::_out
private

Definition at line 186 of file Xml.h.

◆ _name

std::string zypp::xmlout::Node::_name
private

Definition at line 187 of file Xml.h.

◆ _hasContent

bool zypp::xmlout::Node::_hasContent
private

Definition at line 188 of file Xml.h.


The documentation for this class was generated from the following files: