Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.219.166] |
|
Сообщ.
#1
,
|
|
|
Нужен класс, желательно совместимый с STL-итераторами, для представления XML документа.
Подозреваю, что не я первый с этим столкнулся, но пока не нашёл доступных сырцов. Может кто знает где такое есть? Написал простенький класс типа: class CNamedValue { public: CNamedValue(LPCTSTR name = _T(""), LPCTSTR value = _T(""), CNamedValue *parent = 0); CNamedValue(const CNamedValue& o); CNamedValue& operator = (const CNamedValue&); virtual ~CNamedValue(); //NOTE! this function should be redefined in every child class virtual std::auto_ptr<CNamedValue> create(LPCTSTR name, LPCTSTR value, CNamedValue *parent) {return std::auto_ptr<CNamedValue>(new CNamedValue(name, value, parent));} virtual CNamedValue& add(const CNamedValue& o); virtual CNamedValue& add(LPCTSTR name, LPCTSTR value = _T(""), CNamedValue *parent = 0); virtual int size() const; typedef std::vector <CNamedValue> VNAMEDVALUE; typedef VNAMEDVALUE::iterator iterator; typedef VNAMEDVALUE::const_iterator const_iterator; virtual iterator begin(); virtual const_iterator begin() const; virtual iterator end(); virtual const_iterator end() const; virtual iterator find(LPCTSTR lpszName); virtual const tstring& name() const; virtual const tstring& name(LPCTSTR lpszName); virtual const tstring& value() const; virtual const tstring& value(LPCTSTR lpszValue); virtual CNamedValue* parent() const; //XML related virtual LPCWSTR xmlTag() const; //xml tag designated to named value virtual LPCWSTR xmlName() const; //xml attribute for name virtual LPCWSTR xmlValue() const; //xml attribute for value private: struct Impl; Impl *m_pimpl; }; Но поддерживаемая структура XML-я в нём очень ограничена (аттрибуты только NAME и VALUE), а хотелось бы произвольный набор атрибутов со значениями для каждого узла и ещё бы с поддержкой одиночных тэгов (т.е. <something a="1" b="2" />), а не только парных (т.е. <some>...</some>). Заранее благодарен за помощь! |