libzypp
10.5.0
|
Define a xml node structure to parse. More...
#include <ParseDef.h>
Classes | |
class | Impl |
ParseDef implementation. More... | |
Public Types | |
enum | Mode { OPTIONAL = Traits::BIT_OPTIONAL | Traits::BIT_ONCE, MANDTAORY = Traits::BIT_MANDTAORY | Traits::BIT_ONCE, MULTIPLE_OPTIONAL = Traits::BIT_OPTIONAL | Traits::BIT_MULTIPLE, MULTIPLE_MANDTAORY = Traits::BIT_MANDTAORY | Traits::BIT_MULTIPLE } |
Public Member Functions | |
ParseDef (const std::string &name_r, Mode mode_r) | |
ParseDef (const std::string &name_r, Mode mode_r, const shared_ptr< ParseDefConsume > &target_r) | |
virtual | ~ParseDef () |
const std::string & | name () const |
Mode | mode () const |
bool | isOptional () const |
bool | isMandatory () const |
bool | singleDef () const |
bool | multiDef () const |
unsigned | visited () const |
ParseDef & | addNode (ParseDef &subnode_r) |
Add subnode definition. | |
ParseDef & | addNode (const std::string &name_r, Mode mode_r) |
ParseDef & | addNode (const std::string &name_r, Mode mode_r, const shared_ptr< ParseDefConsume > &target_r) |
ParseDef & | operator() (ParseDef &subnode_r) |
Add subnode definition. | |
ParseDef & | operator() (const std::string &name_r, Mode mode_r) |
ParseDef & | operator() (const std::string &name_r, Mode mode_r, const shared_ptr< ParseDefConsume > &target_r) |
ParseDef | operator[] (const std::string &name_r) |
Get subnode by name. | |
void | setConsumer (const shared_ptr< ParseDefConsume > &target_r) |
Set data consumer. | |
void | setConsumer (ParseDefConsume *allocatedTarget_r) |
Set data consumer. | |
void | setConsumer (ParseDefConsume &target_r) |
Set data consumer. | |
void | cancelConsumer () |
Unset data consumer. | |
shared_ptr< ParseDefConsume > | getConsumer () const |
Get data consumer. | |
void | take (Reader &reader_r) |
Parse the node. | |
Static Public Attributes | |
static bool | _debug = false |
Private Types | |
typedef ParseDefTraits | Traits |
Private Member Functions | |
ParseDef (const shared_ptr< Impl > &pimpl_r) | |
Private Attributes | |
RW_pointer< Impl > | _pimpl |
Pointer to implementation (shared!) | |
Friends | |
std::ostream & | operator<< (std::ostream &str, const ParseDef &obj) |
std::ostream & | operator<< (std::ostream &str, const ParseDef::Impl &obj) |
Related Functions | |
(Note that these are not member functions.) | |
std::ostream & | operator<< (std::ostream &str, ParseDef::Mode obj) |
std::ostream & | operator<< (std::ostream &str, const ParseDef &obj) |
Define a xml node structure to parse.
An xml file like this:
<?xml version="1.0" encoding="UTF-8"?> <syscontent> <ident> <name>mycollection</name> <version epoch="0" ver="1.0" rel="1"/> <description>All the cool stuff...</description> <created>1165270942</created> </ident> <onsys> <entry kind="package" name="pax" epoch="0" ver="3.4" rel="12" arch="x86_64"/> <entry kind="product" name="SUSE_SLES" epoch="0" ver="10" arch="x86_64"/> <entry ... </onsys> </syscontent>
Could be described by:
using namespace xml; struct SycontentNode : public ParseDef { SycontentNode( Mode mode_r ) : ParseDef( "syscontent", mode_r ) { (*this)("ident", OPTIONAL) ("onsys", OPTIONAL) ; (*this)["ident"] ("name", OPTIONAL) ("version", OPTIONAL) ("description", OPTIONAL) ("created", OPTIONAL) ; (*this)["onsys"] ("entry", MULTIPLE_OPTIONAL) ; } };
To parse it using an xml::Reader:
xml::Reader reader( input_r ); SycontentNode rootNode( xml::ParseDef::MANDTAORY ); // Define data consumers here. rootNode.take( reader );
Whithout data consumers this will just parse the file but not retrieve any data. You may attach a consumer derived from xml::ParseDefConsume to each node:
// Parse Edition from ver/rel/eopch attributes. struct ConsumeEdition : public ParseDefConsume { ConsumeEdition( Edition & value_r ) : _value( & value_r ) {} virtual void start( const Node & node_r ) { *_value = Edition( node_r.getAttribute("ver").asString(), node_r.getAttribute("rel").asString(), node_r.getAttribute("epoch").asString() ); } Edition *_value; };
xml::Reader reader( input_r ); SycontentNode rootNode( xml::ParseDef::MANDTAORY ); // Define data consumers here. Edition _edition; rootNode["ident"]["version"].setConsumer ( new ConsumeEdition( _edition ) ); rootNode.take( reader );
That's just one way to collect the data. You could as well use a xml::ParseDefConsumeCallback, and redirect the start
call to some arbitrary function or method.
Definition at line 128 of file ParseDef.h.
typedef ParseDefTraits zypp::xml::ParseDef::Traits [private] |
Definition at line 130 of file ParseDef.h.
Definition at line 133 of file ParseDef.h.
zypp::xml::ParseDef::ParseDef | ( | const std::string & | name_r, |
Mode | mode_r | ||
) |
Definition at line 369 of file ParseDef.cc.
zypp::xml::ParseDef::ParseDef | ( | const std::string & | name_r, |
Mode | mode_r, | ||
const shared_ptr< ParseDefConsume > & | target_r | ||
) |
Definition at line 373 of file ParseDef.cc.
zypp::xml::ParseDef::~ParseDef | ( | ) | [virtual] |
Definition at line 386 of file ParseDef.cc.
zypp::xml::ParseDef::ParseDef | ( | const shared_ptr< Impl > & | pimpl_r | ) | [private] |
Definition at line 377 of file ParseDef.cc.
const std::string & zypp::xml::ParseDef::name | ( | ) | const |
Definition at line 389 of file ParseDef.cc.
ParseDef::Mode zypp::xml::ParseDef::mode | ( | ) | const |
Definition at line 392 of file ParseDef.cc.
bool zypp::xml::ParseDef::isOptional | ( | ) | const |
Definition at line 395 of file ParseDef.cc.
bool zypp::xml::ParseDef::isMandatory | ( | ) | const |
Definition at line 398 of file ParseDef.cc.
bool zypp::xml::ParseDef::singleDef | ( | ) | const |
Definition at line 401 of file ParseDef.cc.
bool zypp::xml::ParseDef::multiDef | ( | ) | const |
Definition at line 404 of file ParseDef.cc.
unsigned zypp::xml::ParseDef::visited | ( | ) | const |
Definition at line 407 of file ParseDef.cc.
Add subnode definition.
*this
. ParseDefBuildException | if a subnode with the same name is already defined, or if the subnode is already subnode of an other ParseDef. |
Definition at line 410 of file ParseDef.cc.
Definition at line 167 of file ParseDef.h.
ParseDef& zypp::xml::ParseDef::addNode | ( | const std::string & | name_r, |
Mode | mode_r, | ||
const shared_ptr< ParseDefConsume > & | target_r | ||
) | [inline] |
Definition at line 170 of file ParseDef.h.
Definition at line 179 of file ParseDef.h.
ParseDef& zypp::xml::ParseDef::operator() | ( | const std::string & | name_r, |
Mode | mode_r, | ||
const shared_ptr< ParseDefConsume > & | target_r | ||
) | [inline] |
Definition at line 182 of file ParseDef.h.
ParseDef zypp::xml::ParseDef::operator[] | ( | const std::string & | name_r | ) |
Get subnode by name.
ParseDefBuildException | if no subnode with name_r exists. |
Definition at line 413 of file ParseDef.cc.
void zypp::xml::ParseDef::setConsumer | ( | const shared_ptr< ParseDefConsume > & | target_r | ) |
Set data consumer.
Definition at line 423 of file ParseDef.cc.
void zypp::xml::ParseDef::setConsumer | ( | ParseDefConsume * | allocatedTarget_r | ) |
Set data consumer.
Definition at line 426 of file ParseDef.cc.
void zypp::xml::ParseDef::setConsumer | ( | ParseDefConsume & | target_r | ) |
Set data consumer.
Definition at line 429 of file ParseDef.cc.
void zypp::xml::ParseDef::cancelConsumer | ( | ) |
Unset data consumer.
Definition at line 432 of file ParseDef.cc.
shared_ptr< ParseDefConsume > zypp::xml::ParseDef::getConsumer | ( | ) | const |
Get data consumer.
Definition at line 435 of file ParseDef.cc.
void zypp::xml::ParseDef::take | ( | Reader & | reader_r | ) |
Parse the node.
This parses the node and all defined subnodes. Unknown subnodes are skipped and leave a warning in the logfile.
<node />
). ParseDefException | on error. |
Definition at line 439 of file ParseDef.cc.
std::ostream& operator<< | ( | std::ostream & | str, |
const ParseDef & | obj | ||
) | [friend] |
Definition at line 466 of file ParseDef.cc.
std::ostream& operator<< | ( | std::ostream & | str, |
const ParseDef::Impl & | obj | ||
) | [friend] |
Definition at line 348 of file ParseDef.cc.
std::ostream & operator<< | ( | std::ostream & | str, |
ParseDef::Mode | obj | ||
) | [related] |
ParseDef::Mode stream output.
Definition at line 447 of file ParseDef.cc.
std::ostream & operator<< | ( | std::ostream & | str, |
const ParseDef & | obj | ||
) | [related] |
Stream output.
Definition at line 466 of file ParseDef.cc.
RW_pointer<Impl> zypp::xml::ParseDef::_pimpl [private] |
Pointer to implementation (shared!)
Definition at line 220 of file ParseDef.h.
bool zypp::xml::ParseDef::_debug = false [static] |
Definition at line 229 of file ParseDef.h.