Alessandro Bonazzi a1a639a457 Patch level : 12.0 no-patch
Files correlati     :
Commento            :

xml : Resa possibil la non codifica dei caratteri speciali del tipo '/' -----> &#2F; in scrittura (maialata dovuta all Major Flexform)
2020-11-27 16:01:17 +01:00

101 lines
3.0 KiB
C++
Executable File

#ifndef __XML_H
#define __XML_H
#ifndef __ASSOC_H
#include <assoc.h>
#endif
class TXmlItem;
typedef bool (*XmlItemCallback)(TXmlItem& item, long jolly);
bool xml_encode_text(bool on = true);
class TXmlItem : public TObject
{
TString m_strTag;
TString* m_strText;
TAssoc_array* m_Attributes;
TArray* m_Children;
protected:
bool GetWord(istream& input, TString& str) const;
int ReadTag(istream& input);
TXmlItem& AddChild(TXmlItem* pItem);
public:
const TString& GetTag() const { return m_strTag; }
void SetTag(const char* strTag) { m_strTag = strTag; }
const TString& GetText() const
{
if (m_strText != NULL)
return *m_strText;
return EMPTY_STRING;
}
void SetText(const char* str)
{
if (m_strText == NULL)
m_strText = new TString(str);
else
*m_strText = str;
}
TXmlItem& AddEnclosedText(const char* str);
TXmlItem& AddEnclosedText(const char* strAttr, const char * str);
TXmlItem& AddEnclosedDate(const char* strAttr, const TDate d, const char* f = "1444-");
TXmlItem& AddEnclosedInt(const char* strAttr, const int i);
TXmlItem& AddEnclosedLong(const char* strAttr, const long l);
TXmlItem& AddEnclosedReal(const char* strAttr, const real r);
bool GetEnclosedText(TString& str) const;
bool GetEnclosedText(const char* strAttr, TString & str) const;
bool GetEnclosedDate(const char* strAttr, TDate & d) const;
bool GetEnclosedInt(const char* strAttr, int & i) const;
bool GetEnclosedLong(const char* strAttr, long & l) const;
bool GetEnclosedReal(const char* strAttr, real & r) const;
TXmlItem& SetAttr(const char* strAttr, const char* strVal);
const TString& GetAttr(const char* strAttr) const;
TXmlItem& SetAttr(const char* strAttr, int n);
TXmlItem& SetColorAttr(const char* strAttr, COLOR rgb);
int GetIntAttr(const char* strAttr, int def = 0) const;
TXmlItem& SetAttr(const char* strAttr, bool yes);
bool GetBoolAttr(const char* strAttr) const;
TXmlItem& AddChild(const char* strTag);
TXmlItem& AddSoapString(const char* name, const char* value, bool typized = false);
TXmlItem& AddSoapInt(const char* name, int value, bool typized = false);
int GetChildren() const;
TXmlItem* GetChild(size_t n) const;
void RemoveLastChild();
void Destroy();
bool Read(istream& input);
void Write(ostream& output, int nTab) const;
void AsString(TString& str) const;
void Save(const char* strFilename) const;
bool Load(const char* strFilename);
void Append(const char* strFilename) const;
TXmlItem* ForEach(XmlItemCallback cb, long jolly = 0);
TXmlItem* FindFirst(const char* strTag) const; // Recursive
TXmlItem* FindFirstChild(const char* strTag) const; // First level only
TXmlItem();
~TXmlItem();
};
TXmlItem& operator<<(TXmlItem& item, const char* str);
void Spaces(ostream& outf, int nSpaces);
void WriteXmlString(ostream& outf, const char* str);
void WriteXmlColor(ostream& outf, COLOR rgb);
int hex2int(const char* str);
void save_html_head(ostream& out, const char* title);
#endif