ReactOS  r76032
XMLStorage::XMLNode Struct Reference

in memory representation of an XML node More...

#include <xmlstorage.h>

Inheritance diagram for XMLStorage::XMLNode:
Collaboration diagram for XMLStorage::XMLNode:

Classes

struct  AttributeMap
 map of XML node attributes More...
 
struct  Children
 internal children node list More...
 

Public Types

enum  COPY_FLAGS { COPY_NOCHILDREN }
 
- Public Types inherited from XMLStorage::XS_String
typedef std::string super
 

Public Member Functions

 XMLNode (const XS_String &name)
 
 XMLNode (const XS_String &name, const std::string &leading)
 
 XMLNode (const XMLNode &other)
 
 XMLNode (const XMLNode &other, COPY_FLAGS copy_no_children)
 
virtual ~XMLNode ()
 
void clear ()
 
XMLNodeoperator= (const XMLNode &other)
 
void add_child (XMLNode *child)
 add a new child node More...
 
void remove_children (const XS_String &name)
 remove all children named 'name' More...
 
void put (const XS_String &attr_name, const XS_String &value)
 write access to an attribute More...
 
XS_Stringoperator[] (const XS_String &attr_name)
 index operator write access to an attribute More...
 
template<typename T >
XS_String get (const T &attr_name, LPCXSSTR def=XS_EMPTY_STR) const
 read only access to an attribute More...
 
void erase (const XS_String &attr_name)
 remove the attribute 'attr_name' More...
 
XS_String subvalue (const XS_String &child_name, const XS_String &attr_name, int n=0) const
 convenient value access in children node More...
 
XS_Stringsubvalue (const XS_String &child_name, const XS_String &attr_name, int n=0)
 convenient storage of distinct values in children node More...
 
const Childrenget_children () const
 
Childrenget_children ()
 
const AttributeMapget_attributes () const
 
AttributeMapget_attributes ()
 
XS_String get_content () const
 read element node content More...
 
XS_String get_sub_content (const XPath &xpath) const
 read content of a subnode specified by an XPath expression More...
 
void set_content (const XS_String &s, bool cdata=false)
 set element node content More...
 
bool set_sub_content (const XPath &xpath, const XS_String &s, bool cdata=false)
 set content of a subnode specified by an XPath expression More...
 
bool write (std::ostream &out, const XMLFormat &format, WRITE_MODE mode=FORMAT_SMART, int indent=0) const
 write node with children tree to output stream More...
 
int count (const XPath &xpath) const
 count the nodes matching the given relative XPath expression More...
 
int count (XPath::const_iterator from, const XPath::const_iterator &to) const
 count the nodes matching the given relative XPath expression More...
 
bool filter (const XPath &xpath, XMLNode &target) const
 copy matching tree nodes using the given XPath filter expression More...
 
const XMLNodefind_relative (const XPath &xpath) const
 XPath find function (const) More...
 
XMLNodefind_relative (const XPath &xpath)
 XPath find function. More...
 
XMLNodeget_first_child () const
 
- Public Member Functions inherited from XMLStorage::XS_String
 XS_String ()
 
 XS_String (LPCXSSTR s)
 
 XS_String (LPCXSSTR s, size_t l)
 
 XS_String (const super &other)
 
 XS_String (const XS_String &other)
 
void assign (const XS_String &s)
 
XS_Stringoperator= (LPCXSSTR s)
 
XS_Stringoperator= (const super &s)
 
void assign (LPCXSSTR s)
 
void assign (LPCXSSTR s, size_t l)
 
 operator LPCXSSTR () const
 
XS_Stringprintf (LPCXSSTR fmt,...)
 
XS_Stringvprintf (LPCXSSTR fmt, va_list l)
 
XS_Stringappendf (LPCXSSTR fmt,...)
 
XS_Stringvappendf (LPCXSSTR fmt, va_list l)
 

Protected Member Functions

XMLNodecreate_relative (const XPath &xpath)
 relative XPath create function More...
 
XMLNodefilter (XPath::const_iterator from, const XPath::const_iterator &to) const
 create a new node tree using the given XPath filter expression More...
 
void original_write_worker (std::ostream &out) const
 write node with children tree to output stream using original white space More...
 
void plain_write_worker (std::ostream &out) const
 print node without any white space More...
 
void pretty_write_worker (std::ostream &out, const XMLFormat &format, int indent) const
 pretty print node with children tree to output stream More...
 
void smart_write_worker (std::ostream &out, const XMLFormat &format, int indent) const
 write node with children tree to output stream using smart formating More...
 

Protected Attributes

Children _children
 
AttributeMap _attributes
 
std::string _leading
 
std::string _content
 
std::string _end_leading
 
std::string _trailing
 
bool _cdata_content
 

Friends

struct XMLPos
 
struct const_XMLPos
 
struct XMLReaderBase
 
struct XPathElement
 

Detailed Description

in memory representation of an XML node

Definition at line 854 of file xmlstorage.h.

Member Enumeration Documentation

Enumerator
COPY_NOCHILDREN 

Definition at line 1013 of file xmlstorage.h.

Constructor & Destructor Documentation

XMLStorage::XMLNode::XMLNode ( const XS_String name)
inline
XMLStorage::XMLNode::XMLNode ( const XS_String name,
const std::string leading 
)
inline

Definition at line 990 of file xmlstorage.h.

991  : XS_String(name),
992  _leading(leading),
993  _cdata_content(false)
994  {
995  }
std::string _leading
Definition: xmlstorage.h:1273
Definition: name.c:23
XMLStorage::XMLNode::XMLNode ( const XMLNode other)
inline

Definition at line 997 of file xmlstorage.h.

998  : XS_String(other),
999  _attributes(other._attributes),
1000  _leading(other._leading),
1001  _content(other._content),
1002  _end_leading(other._end_leading),
1003  _trailing(other._trailing),
1004 #ifdef XMLNODE_LOCATION
1005  _location(other._location),
1006 #endif
1007  _cdata_content(false)
1008  {
1009  for(Children::const_iterator it=other._children.begin(); it!=other._children.end(); ++it)
1010  _children.push_back(new XMLNode(**it));
1011  }
XMLNode(const XS_String &name)
Definition: xmlstorage.h:984
int other
Definition: msacm.c:1364
AttributeMap _attributes
Definition: xmlstorage.h:1271
std::string _content
Definition: xmlstorage.h:1274
std::string _leading
Definition: xmlstorage.h:1273
std::string _end_leading
Definition: xmlstorage.h:1275
std::string _trailing
Definition: xmlstorage.h:1276
XMLStorage::XMLNode::XMLNode ( const XMLNode other,
COPY_FLAGS  copy_no_children 
)
inline

Definition at line 1015 of file xmlstorage.h.

1016  : XS_String(other),
1017  _attributes(other._attributes),
1018  _leading(other._leading),
1019  _content(other._content),
1020  _end_leading(other._end_leading),
1021  _trailing(other._trailing),
1022 #ifdef XMLNODE_LOCATION
1023  _location(other._location),
1024 #endif
1025  _cdata_content(false)
1026  {
1027 // assert(copy_no_children==COPY_NOCHILDREN);
1028  }
int other
Definition: msacm.c:1364
AttributeMap _attributes
Definition: xmlstorage.h:1271
std::string _content
Definition: xmlstorage.h:1274
std::string _leading
Definition: xmlstorage.h:1273
std::string _end_leading
Definition: xmlstorage.h:1275
std::string _trailing
Definition: xmlstorage.h:1276
virtual XMLStorage::XMLNode::~XMLNode ( )
inlinevirtual

Definition at line 1030 of file xmlstorage.h.

1031  {
1032  while(!_children.empty()) {
1033  delete _children.back();
1034  _children.pop_back();
1035  }
1036  }

Member Function Documentation

void XMLStorage::XMLNode::add_child ( XMLNode child)
inline

add a new child node

Definition at line 1067 of file xmlstorage.h.

Referenced by XMLStorage::XMLPos::add_down(), XMLStorage::XMLPos::create_node_content(), create_relative(), filter(), and subvalue().

1068  {
1069  _children.push_back(child);
1070  }
static HWND child
Definition: cursoricon.c:298
void XMLStorage::XMLNode::clear ( void  )
inline

Definition at line 1038 of file xmlstorage.h.

Referenced by XMLStorage::XMLNode::Children::clear().

1039  {
1040  _leading.erase();
1041  _content.erase();
1042  _end_leading.erase();
1043  _trailing.erase();
1044 
1045  _attributes.clear();
1046  _children.clear();
1047 
1048  XS_String::erase();
1049  }
AttributeMap _attributes
Definition: xmlstorage.h:1271
std::string _content
Definition: xmlstorage.h:1274
std::string _leading
Definition: xmlstorage.h:1273
std::string _end_leading
Definition: xmlstorage.h:1275
std::string _trailing
Definition: xmlstorage.h:1276
int XMLStorage::XMLNode::count ( const XPath xpath) const
inline

count the nodes matching the given relative XPath expression

Definition at line 1244 of file xmlstorage.h.

Referenced by XMLStorage::XMLPos::count().

1245  {
1246  return count(xpath.begin(), xpath.end());
1247  }
int count(const XPath &xpath) const
count the nodes matching the given relative XPath expression
Definition: xmlstorage.h:1244
int XMLStorage::XMLNode::count ( XPath::const_iterator  from,
const XPath::const_iterator &  to 
) const

count the nodes matching the given relative XPath expression

Definition at line 301 of file xmlstorage.cpp.

302 {
303  const XPathElement& elem = *from++;
304  int cnt = 0;
305  int n = 0;
306 
307  for(XMLNode::Children::const_iterator it=_children.begin(); it!=_children.end(); ++it)
308  if (elem.matches(**it, n)) {
309  if (from != to)
310  // iterate deeper
311  cnt += (*it)->count(from, to);
312  else
313  // increment match counter
314  ++cnt;
315  }
316 
317  return cnt;
318 }
GLuint n
Definition: s_context.h:57
friend struct XPathElement
Definition: xmlstorage.h:982
static size_t elem
Definition: string.c:67
CardRegion * from
Definition: spigame.cpp:19
XMLNode * XMLStorage::XMLNode::create_relative ( const XPath xpath)
protected

relative XPath create function

Definition at line 279 of file xmlstorage.cpp.

Referenced by XMLStorage::XMLPos::create_relative(), and set_sub_content().

280 {
281  XMLNode* node = this;
282 
283  for(XPath::const_iterator it=xpath.begin(); it!=xpath.end(); ++it) {
284  XMLNode* child = it->find(node);
285 
286  if (!child) {
287  child = new XMLNode(it->_child_name);
288  node->add_child(child);
289 
290  if (!it->_attr_name.empty())
291  (*this)[it->_attr_name] = it->_attr_value;
292  }
293 
294  node = child;
295  }
296 
297  return node;
298 }
XMLNode(const XS_String &name)
Definition: xmlstorage.h:984
Definition: graphics.c:176
static HWND child
Definition: cursoricon.c:298
struct node node
void XMLStorage::XMLNode::erase ( const XS_String attr_name)
inline

remove the attribute 'attr_name'

Definition at line 1106 of file xmlstorage.h.

Referenced by XMLStorage::XMLPos::erase(), and XMLStorage::XMLNode::Children::remove().

1107  {
1108  _attributes.erase(attr_name);
1109  }
AttributeMap _attributes
Definition: xmlstorage.h:1271
bool XMLStorage::XMLNode::filter ( const XPath xpath,
XMLNode target 
) const

copy matching tree nodes using the given XPath filter expression

Definition at line 321 of file xmlstorage.cpp.

Referenced by XMLStorage::XMLPos::filter().

322 {
323  XMLNode* ret = filter(xpath.begin(), xpath.end());
324 
325  if (ret) {
326  // move returned nodes to target node
327  target._children.move(ret->_children);
328  target._attributes = ret->_attributes;
329 
330  delete ret;
331 
332  return true;
333  } else
334  return false;
335 }
XMLNode(const XS_String &name)
Definition: xmlstorage.h:984
bool filter(const XPath &xpath, XMLNode &target) const
copy matching tree nodes using the given XPath filter expression
Definition: xmlstorage.cpp:321
int ret
XMLNode * XMLStorage::XMLNode::filter ( XPath::const_iterator  from,
const XPath::const_iterator &  to 
) const
protected

create a new node tree using the given XPath filter expression

Definition at line 338 of file xmlstorage.cpp.

339 {
340  XMLNode* copy = NULL;
341 
342  const XPathElement& elem = *from++;
343  int cnt = 0;
344  int n = 0;
345 
346  for(XMLNode::Children::const_iterator it=_children.begin(); it!=_children.end(); ++it)
347  if (elem.matches(**it, n)) {
348  if (!copy)
349  copy = new XMLNode(*this, XMLNode::COPY_NOCHILDREN);
350 
351  if (from != to) {
352  XMLNode* ret = (*it)->filter(from, to);
353 
354  if (ret) {
355  copy->add_child(ret);
356  ++cnt;
357  }
358  } else {
359  copy->add_child(new XMLNode(**it, XMLNode::COPY_NOCHILDREN));
360  ++cnt;
361  }
362  }
363 
364  if (cnt > 0) {
365  return copy;
366  } else {
367  delete copy;
368  return NULL;
369  }
370 }
XMLNode(const XS_String &name)
Definition: xmlstorage.h:984
GLuint n
Definition: s_context.h:57
friend struct XPathElement
Definition: xmlstorage.h:982
static size_t elem
Definition: string.c:67
smooth NULL
Definition: ftsmooth.c:557
int ret
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
Definition: copy.c:51
CardRegion * from
Definition: spigame.cpp:19
const XMLNode * XMLStorage::XMLNode::find_relative ( const XPath xpath) const

XPath find function (const)

Definition at line 251 of file xmlstorage.cpp.

Referenced by get_sub_content(), XMLStorage::XMLPos::go(), and XMLStorage::const_XMLPos::go().

252 {
253  const XMLNode* node = this;
254 
255  for(XPath::const_iterator it=xpath.begin(); it!=xpath.end(); ++it) {
256  node = it->const_find(node);
257 
258  if (!node)
259  return NULL;
260  }
261 
262  return node;
263 }
XMLNode(const XS_String &name)
Definition: xmlstorage.h:984
Definition: graphics.c:176
struct node node
smooth NULL
Definition: ftsmooth.c:557
XMLNode * XMLStorage::XMLNode::find_relative ( const XPath xpath)

XPath find function.

Definition at line 265 of file xmlstorage.cpp.

266 {
267  XMLNode* node = this;
268 
269  for(XPath::const_iterator it=xpath.begin(); it!=xpath.end(); ++it) {
270  node = it->find(node);
271 
272  if (!node)
273  return NULL;
274  }
275 
276  return node;
277 }
XMLNode(const XS_String &name)
Definition: xmlstorage.h:984
Definition: graphics.c:176
struct node node
smooth NULL
Definition: ftsmooth.c:557
template<typename T >
XS_String XMLStorage::XMLNode::get ( const T attr_name,
LPCXSSTR  def = XS_EMPTY_STR 
) const
inline

read only access to an attribute

Definition at line 1095 of file xmlstorage.h.

Referenced by XMLStorage::XMLPos::get(), XMLStorage::const_XMLPos::get(), XMLStorage::XPathElement::matches(), XMLStorage::const_XMLPos::operator[](), subvalue(), XMLStorage::XMLBool::XMLBool(), XMLStorage::XMLDouble::XMLDouble(), XMLStorage::XMLInt::XMLInt(), and XMLStorage::XMLString::XMLString().

1096  {
1097  AttributeMap::const_iterator found = _attributes.find(attr_name);
1098 
1099  if (found != _attributes.end())
1100  return found->second;
1101  else
1102  return def;
1103  }
AttributeMap _attributes
Definition: xmlstorage.h:1271
const AttributeMap& XMLStorage::XMLNode::get_attributes ( ) const
inline

Definition at line 1171 of file xmlstorage.h.

1172  {
1173  return _attributes;
1174  }
AttributeMap _attributes
Definition: xmlstorage.h:1271
AttributeMap& XMLStorage::XMLNode::get_attributes ( )
inline

Definition at line 1176 of file xmlstorage.h.

1177  {
1178  return _attributes;
1179  }
AttributeMap _attributes
Definition: xmlstorage.h:1271
const Children& XMLStorage::XMLNode::get_children ( ) const
inline

Definition at line 1161 of file xmlstorage.h.

1162  {
1163  return _children;
1164  }
Children& XMLStorage::XMLNode::get_children ( )
inline

Definition at line 1166 of file xmlstorage.h.

1167  {
1168  return _children;
1169  }
XS_String XMLStorage::XMLNode::get_content ( ) const
inline

read element node content

Definition at line 1182 of file xmlstorage.h.

Referenced by get_sub_content().

1183  {
1184  return DecodeXMLString(_content);
1185  }
XS_String DecodeXMLString(const std::string &str)
decode XML string literals
Definition: xmlstorage.cpp:478
std::string _content
Definition: xmlstorage.h:1274
XMLNode* XMLStorage::XMLNode::get_first_child ( ) const
inline

Definition at line 1261 of file xmlstorage.h.

Referenced by XMLStorage::XMLPos::go_down(), and XMLStorage::const_XMLPos::go_down().

1262  {
1263  if (!_children.empty())
1264  return _children.front();
1265  else
1266  return NULL;
1267  }
smooth NULL
Definition: ftsmooth.c:557
XS_String XMLStorage::XMLNode::get_sub_content ( const XPath xpath) const
inline

read content of a subnode specified by an XPath expression

Definition at line 1188 of file xmlstorage.h.

1189  {
1190  const XMLNode* node = find_relative(xpath);
1191 
1192  if (node)
1193  return node->get_content();
1194  else
1195  return XS_EMPTY_STR;
1196  }
XMLNode(const XS_String &name)
Definition: xmlstorage.h:984
Definition: graphics.c:176
#define XS_EMPTY_STR
Definition: xmlstorage.h:406
const XMLNode * find_relative(const XPath &xpath) const
XPath find function (const)
Definition: xmlstorage.cpp:251

Definition at line 1051 of file xmlstorage.h.

1052  {
1053  _children.clear();
1054  _children.copy(other._children);
1055 
1056  _attributes = other._attributes;
1057 
1058  _leading = other._leading;
1059  _content = other._content;
1060  _end_leading = other._end_leading;
1061  _trailing = other._trailing;
1062 
1063  return *this;
1064  }
int other
Definition: msacm.c:1364
AttributeMap _attributes
Definition: xmlstorage.h:1271
std::string _content
Definition: xmlstorage.h:1274
std::string _leading
Definition: xmlstorage.h:1273
std::string _end_leading
Definition: xmlstorage.h:1275
void copy(const Children &other)
Definition: xmlstorage.h:943
std::string _trailing
Definition: xmlstorage.h:1276

index operator write access to an attribute

Definition at line 1089 of file xmlstorage.h.

1090  {
1091  return _attributes[attr_name];
1092  }
AttributeMap _attributes
Definition: xmlstorage.h:1271
void XMLStorage::XMLNode::original_write_worker ( std::ostream out) const
protected

write node with children tree to output stream using original white space

Definition at line 528 of file xmlstorage.cpp.

Referenced by write().

529 {
530  out << _leading << '<' << EncodeXMLString(*this);
531 
532  for(AttributeMap::const_iterator it=_attributes.begin(); it!=_attributes.end(); ++it)
533  out << ' ' << EncodeXMLString(it->first) << "=\"" << EncodeXMLString(it->second) << "\"";
534 
535  if (!_children.empty() || !_content.empty()) {
536  out << '>';
537 
538  if (_cdata_content)
539  out << CDATA_START << _content << CDATA_END;
540  else
541  out << _content;
542 
543  for(Children::const_iterator it=_children.begin(); it!=_children.end(); ++it)
544  (*it)->original_write_worker(out);
545 
546  out << _end_leading << "</" << EncodeXMLString(*this) << '>';
547  } else
548  out << "/>";
549 
550  out << _trailing;
551 }
AttributeMap _attributes
Definition: xmlstorage.h:1271
static FILE * out
Definition: regtests2xml.c:44
std::string _content
Definition: xmlstorage.h:1274
std::string _leading
Definition: xmlstorage.h:1273
std::string EncodeXMLString(const XS_String &str, bool cdata)
encode XML string literals
Definition: xmlstorage.cpp:374
void XMLStorage::XMLNode::plain_write_worker ( std::ostream out) const
protected

print node without any white space

Definition at line 555 of file xmlstorage.cpp.

Referenced by write().

556 {
557  out << '<' << EncodeXMLString(*this);
558 
559  for(AttributeMap::const_iterator it=_attributes.begin(); it!=_attributes.end(); ++it)
560  out << ' ' << EncodeXMLString(it->first) << "=\"" << EncodeXMLString(it->second) << "\"";
561 
562  // strip leading white space from content
563  const char* content = _content.c_str();
564  while(isspace((unsigned char)*content)) ++content;
565 
566  if (!_children.empty() || *content) {
567  out << ">" << content;
568 
569  for(Children::const_iterator it=_children.begin(); it!=_children.end(); ++it)
570  (*it)->plain_write_worker(out);
571 
572  out << "</" << EncodeXMLString(*this) << ">";
573  } else
574  out << "/>";
575 }
#define isspace(c)
Definition: acclib.h:69
content
Definition: atl_ax.c:977
AttributeMap _attributes
Definition: xmlstorage.h:1271
static FILE * out
Definition: regtests2xml.c:44
std::string _content
Definition: xmlstorage.h:1274
std::string EncodeXMLString(const XS_String &str, bool cdata)
encode XML string literals
Definition: xmlstorage.cpp:374
void XMLStorage::XMLNode::pretty_write_worker ( std::ostream out,
const XMLFormat format,
int  indent 
) const
protected

pretty print node with children tree to output stream

Definition at line 579 of file xmlstorage.cpp.

Referenced by write().

580 {
581  for(int i=indent; i--; )
583 
584  out << '<' << EncodeXMLString(*this);
585 
586  for(AttributeMap::const_iterator it=_attributes.begin(); it!=_attributes.end(); ++it)
587  out << ' ' << EncodeXMLString(it->first) << "=\"" << EncodeXMLString(it->second) << "\"";
588 
589  // strip leading white space from content
590  const char* content = _content.c_str();
591  while(isspace((unsigned char)*content)) ++content;
592 
593  if (!_children.empty() || *content) {
594  out << '>' << content;
595 
596  if (!_children.empty())
597  out << format._endl;
598 
599  for(Children::const_iterator it=_children.begin(); it!=_children.end(); ++it)
600  (*it)->pretty_write_worker(out, format, indent+1);
601 
602  for(int i=indent; i--; )
603  out << XML_INDENT_SPACE;
604 
605  out << "</" << EncodeXMLString(*this) << '>' << format._endl;
606  } else
607  out << "/>" << format._endl;
608 }
#define isspace(c)
Definition: acclib.h:69
static const WCHAR indent[]
Definition: object.c:1165
GLenum GLclampf GLint i
Definition: glfuncs.h:14
content
Definition: atl_ax.c:977
AttributeMap _attributes
Definition: xmlstorage.h:1271
static FILE * out
Definition: regtests2xml.c:44
std::string _content
Definition: xmlstorage.h:1274
#define XML_INDENT_SPACE
Definition: xmlstorage.h:617
std::string EncodeXMLString(const XS_String &str, bool cdata)
encode XML string literals
Definition: xmlstorage.cpp:374
void XMLStorage::XMLNode::put ( const XS_String attr_name,
const XS_String value 
)
inline

write access to an attribute

Definition at line 1083 of file xmlstorage.h.

Referenced by XMLStorage::XMLPos::put().

1084  {
1085  _attributes[attr_name] = value;
1086  }
AttributeMap _attributes
Definition: xmlstorage.h:1271
GLsizei const GLfloat * value
Definition: glext.h:6069
void XMLStorage::XMLNode::remove_children ( const XS_String name)
inline

remove all children named 'name'

Definition at line 1073 of file xmlstorage.h.

Referenced by XMLStorage::XMLPos::remove_children().

1074  {
1075  Children::iterator it, next=_children.begin();
1076 
1077  while((it=next++) != _children.end())
1078  if (**it == name)
1079  _children.erase(it);
1080  }
static unsigned __int64 next
Definition: rand_nt.c:6
Definition: name.c:23
void XMLStorage::XMLNode::set_content ( const XS_String s,
bool  cdata = false 
)
inline

set element node content

Definition at line 1199 of file xmlstorage.h.

Referenced by XMLStorage::XMLPos::create_node_content(), and set_sub_content().

1200  {
1201  _content.assign(EncodeXMLString(s.c_str(), cdata));
1202  }
std::string _content
Definition: xmlstorage.h:1274
GLdouble s
Definition: gl.h:2039
std::string EncodeXMLString(const XS_String &str, bool cdata)
encode XML string literals
Definition: xmlstorage.cpp:374
bool XMLStorage::XMLNode::set_sub_content ( const XPath xpath,
const XS_String s,
bool  cdata = false 
)
inline

set content of a subnode specified by an XPath expression

Definition at line 1205 of file xmlstorage.h.

1206  {
1207  XMLNode* node = create_relative(xpath);
1208 
1209  if (node) {
1210  node->set_content(s, cdata);
1211  return true;
1212  } else
1213  return false;
1214  }
XMLNode(const XS_String &name)
Definition: xmlstorage.h:984
Definition: graphics.c:176
GLdouble s
Definition: gl.h:2039
XMLNode * create_relative(const XPath &xpath)
relative XPath create function
Definition: xmlstorage.cpp:279
void XMLStorage::XMLNode::smart_write_worker ( std::ostream out,
const XMLFormat format,
int  indent 
) const
protected

write node with children tree to output stream using smart formating

Definition at line 612 of file xmlstorage.cpp.

Referenced by write().

613 {
614  // strip the first line feed from _leading
615  const char* leading = _leading.c_str();
616  if (*leading == '\n') ++leading;
617 
618  if (!*leading)
619  for(int i=indent; i--; )
621  else
622  out << leading;
623 
624  out << '<' << EncodeXMLString(*this);
625 
626  for(AttributeMap::const_iterator it=_attributes.begin(); it!=_attributes.end(); ++it)
627  out << ' ' << EncodeXMLString(it->first) << "=\"" << EncodeXMLString(it->second) << "\"";
628 
629  // strip leading white space from content
630  const char* content = _content.c_str();
631  while(isspace((unsigned char)*content)) ++content;
632 
633  if (_children.empty() && !*content)
634  out << "/>";
635  else {
636  out << '>';
637 
638  if (_cdata_content)
639  out << CDATA_START << _content << CDATA_END;
640  else if (!*content)
641  out << format._endl;
642  else
643  out << content;
644 
645  Children::const_iterator it = _children.begin();
646 
647  if (it != _children.end()) {
648  for(; it!=_children.end(); ++it)
649  (*it)->smart_write_worker(out, format, indent+1);
650 
651  // strip the first line feed from _end_leading
652  const char* end_leading = _end_leading.c_str();
653  if (*end_leading == '\n') ++end_leading;
654 
655  if (!*end_leading)
656  for(int i=indent; i--; )
657  out << XML_INDENT_SPACE;
658  else
659  out << end_leading;
660  } else
661  out << _end_leading;
662 
663  out << "</" << EncodeXMLString(*this) << '>';
664  }
665 
666  if (_trailing.empty())
667  out << format._endl;
668  else
669  out << _trailing;
670 }
#define isspace(c)
Definition: acclib.h:69
static const WCHAR indent[]
Definition: object.c:1165
GLuint n
Definition: s_context.h:57
GLenum GLclampf GLint i
Definition: glfuncs.h:14
content
Definition: atl_ax.c:977
AttributeMap _attributes
Definition: xmlstorage.h:1271
static FILE * out
Definition: regtests2xml.c:44
std::string _content
Definition: xmlstorage.h:1274
#define XML_INDENT_SPACE
Definition: xmlstorage.h:617
std::string _leading
Definition: xmlstorage.h:1273
std::string EncodeXMLString(const XS_String &str, bool cdata)
encode XML string literals
Definition: xmlstorage.cpp:374
XS_String XMLStorage::XMLNode::subvalue ( const XS_String child_name,
const XS_String attr_name,
int  n = 0 
) const
inline

convenient value access in children node

Definition at line 1112 of file xmlstorage.h.

1113  {
1114  const XMLNode* node = XPathElement(child_name, n).const_find(this);
1115 
1116  if (node)
1117  return node->get(attr_name);
1118  else
1119  return XS_String();
1120  }
XMLNode(const XS_String &name)
Definition: xmlstorage.h:984
Definition: graphics.c:176
GLuint n
Definition: s_context.h:57
friend struct XPathElement
Definition: xmlstorage.h:982
XS_String& XMLStorage::XMLNode::subvalue ( const XS_String child_name,
const XS_String attr_name,
int  n = 0 
)
inline

convenient storage of distinct values in children node

Definition at line 1123 of file xmlstorage.h.

1124  {
1125  XMLNode* node = XPathElement(child_name, n).find(this);
1126 
1127  if (!node) {
1128  node = new XMLNode(child_name);
1129  add_child(node);
1130  }
1131 
1132  return (*node)[attr_name];
1133  }
XMLNode(const XS_String &name)
Definition: xmlstorage.h:984
Definition: graphics.c:176
void add_child(XMLNode *child)
add a new child node
Definition: xmlstorage.h:1067
GLuint n
Definition: s_context.h:57
friend struct XPathElement
Definition: xmlstorage.h:982
bool XMLStorage::XMLNode::write ( std::ostream out,
const XMLFormat format,
WRITE_MODE  mode = FORMAT_SMART,
int  indent = 0 
) const
inline

write node with children tree to output stream

Definition at line 1221 of file xmlstorage.h.

1222  {
1223  switch(mode) {
1224  case FORMAT_PLAIN:
1226  break;
1227 
1228  case FORMAT_PRETTY:
1230  break;
1231 
1232  case FORMAT_ORIGINAL:
1234  break;
1235 
1236  default: // FORMAT_SMART
1238  }
1239 
1240  return out.good();
1241  }
write XML stream preserving original white space and comments
Definition: xmlstorage.h:808
static const WCHAR indent[]
Definition: object.c:1165
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
preserve original white space and comments if present; pretty print otherwise
Definition: xmlstorage.h:807
static FILE * out
Definition: regtests2xml.c:44
void plain_write_worker(std::ostream &out) const
print node without any white space
Definition: xmlstorage.cpp:555
void smart_write_worker(std::ostream &out, const XMLFormat &format, int indent) const
write node with children tree to output stream using smart formating
Definition: xmlstorage.cpp:612
void original_write_worker(std::ostream &out) const
write node with children tree to output stream using original white space
Definition: xmlstorage.cpp:528
void pretty_write_worker(std::ostream &out, const XMLFormat &format, int indent) const
pretty print node with children tree to output stream
Definition: xmlstorage.cpp:579

Friends And Related Function Documentation

friend struct const_XMLPos
friend

Definition at line 980 of file xmlstorage.h.

friend struct XMLPos
friend

Definition at line 979 of file xmlstorage.h.

friend struct XMLReaderBase
friend

Definition at line 981 of file xmlstorage.h.

friend struct XPathElement
friend

Definition at line 982 of file xmlstorage.h.

Referenced by subvalue().

Member Data Documentation

bool XMLStorage::XMLNode::_cdata_content
protected

Definition at line 1282 of file xmlstorage.h.

std::string XMLStorage::XMLNode::_end_leading
protected

Definition at line 1275 of file xmlstorage.h.

Referenced by clear(), and operator=().

std::string XMLStorage::XMLNode::_leading
protected

Definition at line 1273 of file xmlstorage.h.

Referenced by clear(), operator=(), and original_write_worker().

std::string XMLStorage::XMLNode::_trailing
protected

Definition at line 1276 of file xmlstorage.h.

Referenced by clear(), and operator=().


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