KSquare Utilities
KKB::XmlStream Class Reference

Manages the reading and writing of objects in a simple XML format. For a class to be supported by XmlStream it must implement: More...

#include <XmlStream.h>

Public Types

typedef XmlStreamXmlStreamPtr
 

Public Member Functions

 XmlStream (XmlTokenizerPtr _tokenStream)
 
 XmlStream (const KKStr &_fileName, RunLog &_log)
 
virtual ~XmlStream ()
 
virtual XmlContentPtr GetNextContent (RunLog &log)
 
virtual XmlTokenPtr GetNextToken (VolConstBool &cancelFlag, RunLog &log)
 
void RegisterFactory (XmlFactoryPtr factory)
 Registers a Factory at the current hierarchy that is being processed. More...
 

Detailed Description

Manages the reading and writing of objects in a simple XML format. For a class to be supported by XmlStream it must implement:

  • Default constructor.
  • Helper Class derived form XmlElement
  • Helper Class derived from XmlFactory
  • Method XmlRead
  • Method XmlWrite

Definition at line 46 of file XmlStream.h.

Member Typedef Documentation

Definition at line 49 of file XmlStream.h.

Constructor & Destructor Documentation

XmlStream::XmlStream ( XmlTokenizerPtr  _tokenStream)

Definition at line 29 of file XmlStream.cpp.

References KKB::KKStr::KKStr(), and KKB::VectorKKStr::VectorKKStr().

29  :
30  endOfElementTagNames (),
31  endOfElemenReached (false),
32  fileName (),
33  nameOfLastEndTag (),
34  tokenStream (_tokenStream),
35  weOwnTokenStream (false)
36 {
37 }
XmlStream::XmlStream ( const KKStr _fileName,
RunLog _log 
)

Definition at line 41 of file XmlStream.cpp.

References KKB::KKStr::KKStr(), KKB::VectorKKStr::VectorKKStr(), and KKB::XmlTokenizer::XmlTokenizer().

Referenced by KKMLL::TrainingProcess2::LoadExistingTrainingProcess(), and KKMLL::NormalizationParms::ReadFromFile().

41  :
42  endOfElementTagNames (),
43  endOfElemenReached (false),
44  fileName (_fileName),
45  nameOfLastEndTag (),
46  tokenStream (NULL),
47  weOwnTokenStream (false)
48 {
49  bool fileOpened = false;
50  tokenStream = new XmlTokenizer (fileName, fileOpened);
51  weOwnTokenStream = true;
52 }
Manages the break down a stream into a set of logical tokens compatible with the XML format...
Definition: XmlTokenizer.h:25
XmlStream::~XmlStream ( )
virtual

Definition at line 56 of file XmlStream.cpp.

57 {
58  delete tokenStream;
59  tokenStream = NULL;
60 }

Member Function Documentation

XmlContentPtr XmlStream::GetNextContent ( RunLog log)
virtual

Will return any content that may exist before the next tag; if there is no content before the next tag will return NULL

Definition at line 210 of file XmlStream.cpp.

References KKB::KKStr::FirstChar(), KKB::XmlTokenizer::GetNextToken(), KKB::XmlTokenizer::Peek(), and KKB::XmlContent::XmlContent().

211 {
212  if (!tokenStream)
213  return NULL;
214 
215  KKStrConstPtr peekNext = tokenStream->Peek (0);
216  if (!peekNext)
217  return NULL;
218 
219  if (peekNext->FirstChar () == '<')
220  return NULL;
221 
222  else
223  {
224  KKStrPtr ts = tokenStream->GetNextToken ();
225  if (ts)
226  return new XmlContent (ts);
227  else
228  return NULL;
229  }
230 }
char FirstChar() const
Definition: KKStr.cpp:1970
KKStrConstPtr Peek(kkuint32 idx)
Allows you to look at future tokens in the stream; index of 0 would be the next token to be extracted...
KKStrPtr GetNextToken()
Will retrieve the next token in the stream which will be either a tag token or up to one line of the ...
XmlTokenPtr XmlStream::GetNextToken ( VolConstBool cancelFlag,
RunLog log 
)
virtual

Will return either a XmlElement or a XmlContent which ever is next; If we are at the end of the element then NULL will be returned.

Definition at line 116 of file XmlStream.cpp.

References KKB::KKStr::Concat(), KKB::XmlFactory::FactoryLookUp(), KKB::KKStr::FirstChar(), KKB::XmlTokenizer::GetNextToken(), GetNextToken(), KKB::XmlFactory::ManufatureXmlElement(), KKB::XmlTag::Name(), KKB::XmlTag::tagEmpty, KKB::XmlTag::tagEnd, KKB::XmlTag::tagStart, KKB::XmlTag::TagType(), KKB::XmlContent::XmlContent(), KKB::XmlElementUnKnownFactoryInstance(), and KKB::XmlTag::XmlTag().

Referenced by GetNextToken(), KKMLL::TrainingProcess2::LoadExistingTrainingProcess(), KKMLL::NormalizationParms::ReadFromFile(), KKMLL::ModelParamKnn::ReadXML(), KKMLL::AttributeTypeVector::ReadXML(), KKB::VectorKKStr::ReadXML(), KKMLL::ModelParamSvmBase::ReadXML(), KKMLL::ModelParamUsfCasCor::ReadXML(), KKMLL::ModelParamDual::ReadXML(), KKMLL::TrainingClass::ReadXML(), KKMLL::NormalizationParms::ReadXML(), KKMLL::ModelKnn::ReadXML(), KKMLL::ClassProbList::ReadXML(), KKMLL::FeatureEncoder::ReadXML(), KKB::BitString::ReadXML(), KKMLL::ModelUsfCasCor::ReadXML(), KKMLL::Attribute::ReadXML(), KKMLL::ModelSvmBase::ReadXML(), KKMLL::ModelParamOldSVM::ReadXML(), KKMLL::FeatureNumList::ReadXML(), KKMLL::TrainingClassList::ReadXML(), KKMLL::AttributeList::ReadXML(), KKMLL::BinaryClassParmsList::ReadXML(), SVM233::SvmModel233::ReadXML(), SVM289_MFS::Svm_Model::ReadXML(), KKMLL::ModelDual::ReadXML(), KKMLL::FileDesc::ReadXML(), KKMLL::SVMparam::ReadXML(), KKMLL::ModelOldSVM::ReadXML(), KKMLL::SVMModel::ReadXML(), KKMLL::TrainingConfiguration2::ReadXML(), KKMLL::TrainingProcess2::ReadXML(), KKB::KKStr::ReadXML(), KKMLL::MLClassIndexList::ReadXML(), KKB::KKStrList::ReadXML(), KKB::KKStrListIndexed::ReadXML(), KKB::XmlElementArrayFloat2DVarying::XmlElementArrayFloat2DVarying(), KKB::XmlElementBool::XmlElementBool(), KKB::XmlElementKeyValuePairs::XmlElementKeyValuePairs(), KKMLL::XmlElementMLClass::XmlElementMLClass(), KKMLL::XmlElementMLClassNameList::XmlElementMLClassNameList(), and KKB::XmlElementUnKnown::XmlElementUnKnown().

119 {
120  if (endOfElemenReached || cancelFlag)
121  return NULL;
122 
123  XmlTokenPtr token = NULL;
124 
125  KKStrPtr t = tokenStream->GetNextToken ();
126  if (t == NULL)
127  return NULL;
128 
129  if (t->FirstChar () == '<')
130  {
131  XmlTagPtr tag = new XmlTag (t);
132  delete t;
133  t = NULL;
134  if (tag->TagType () == XmlTag::TagTypes::tagStart)
135  {
136  XmlFactoryPtr factory = TrackDownFactory (tag->Name ());
137  if (!factory)
139  else
140  int zed =100;
141  log.Level (50) << "XmlStream::GetNextToken Factory Selected: " << factory->ClassName () << endl;
142 
143  PushXmlElementLevel (tag->Name ());
144  token = factory->ManufatureXmlElement (tag, *this, cancelFlag, log);
145  KKStr endTagName = endOfElementTagNames.back ();
146  PopXmlElementLevel ();
147  endOfElemenReached = false;
148  }
149 
150  else if (tag->TagType () == XmlTag::TagTypes::tagEmpty)
151  {
152  XmlFactoryPtr factory = XmlFactory::FactoryLookUp (tag->Name ());
153  if (!factory)
155  PushXmlElementLevel (tag->Name ());
156  endOfElemenReached = true;
157  token = factory->ManufatureXmlElement (tag, *this, cancelFlag, log);
158  if ((!endOfElemenReached) && (tag->TagType () == XmlTag::TagTypes::tagStart))
159  {
160  // The element that we just read did not finish consuming all its components.
161  log.Level (-1) << "XmlStream::GetNextToken ***WARNING*** The element just read[" << tag->Name () << "] Did not consume all its elements." << endl;
162  XmlTokenPtr t = GetNextToken (cancelFlag, log);
163  while (t)
164  {
165  delete t;
166  t = GetNextToken (cancelFlag, log);
167  }
168  }
169  endOfElemenReached = false;
170  PopXmlElementLevel ();
171  }
172 
173  else if (tag->TagType () == XmlTag::TagTypes::tagEnd)
174  {
175  if (endOfElementTagNames.size () < 1)
176  {
177  // end tag with no matching start tag.
178  log.Level (-1) << endl
179  << "XmlStream::GetNextToken ***ERROR*** Encountered end-tag </" << tag->Name () << "> with no matching start-tag." << endl
180  << endl;
181  }
182  else
183  {
184  endOfElemenReached = true;
185  nameOfLastEndTag = tag->Name ();
186  if (!endOfElementTagNames.back ().EqualIgnoreCase (nameOfLastEndTag))
187  {
188  log.Level (-1) << endl
189  << "XmlStream::GetNextToken ***ERROR*** Encountered end-tag </" << nameOfLastEndTag << "> does not match StartTag <" << endOfElementTagNames.back () << ">." << endl
190  << endl;
191  // </End-Tag> does not match <Start-Tag> we will put back on token stream assuming that we are missing a </End-Tag>
192  // We will end the current element here.
193  tokenStream->PushTokenOnFront (new KKStr ("<" + tag->Name () + " />"));
194  }
195  }
196  delete tag;
197  tag = NULL;
198  }
199  }
200  else
201  {
202  token = new XmlContent (t);
203  }
204  return token;
205 } /* GetNextToken */
void PushTokenOnFront(KKStrPtr t)
places token at current position such that it will be the next token extracted from the stream...
HTMLReport &__cdecl endl(HTMLReport &htmlReport)
Definition: HTMLReport.cpp:240
TagTypes TagType() const
Definition: XmlStream.h:194
char FirstChar() const
Definition: KKStr.cpp:1970
const KKStr & Name() const
Definition: XmlStream.h:193
RunLog & Level(kkint32 _level)
Definition: RunLog.cpp:220
static XmlFactory * FactoryLookUp(const KKStr &className)
Definition: XmlStream.cpp:879
virtual const KKStr & ClassName() const
Definition: XmlStream.h:387
virtual XmlElementPtr ManufatureXmlElement(XmlTagPtr tag, XmlStream &s, VolConstBool &cancelFlag, RunLog &log)=0
KKStrPtr GetNextToken()
Will retrieve the next token in the stream which will be either a tag token or up to one line of the ...
virtual XmlTokenPtr GetNextToken(VolConstBool &cancelFlag, RunLog &log)
Definition: XmlStream.cpp:116
XmlFactoryPtr XmlElementUnKnownFactoryInstance()
Definition: XmlStream.cpp:1090
void XmlStream::RegisterFactory ( XmlFactoryPtr  factory)

Registers a Factory at the current hierarchy that is being processed.

Definition at line 67 of file XmlStream.cpp.

68 {
69  if (factoryManagers.size () > 0)
70  factoryManagers.back ()->RegisterFactory (factory);
71  else
73 
74 } /* RegisterFactory */
static void RegisterFactory(XmlFactory *factory)
Definition: XmlStream.cpp:897

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