root/experimental/NT-based/NTSpecific/XML_Stuff impl.hpp

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. CreateNode
  2. CreateNode
  3. CreateComment
  4. GetParseError
  5. ToXML
  6. FromXML
  7. ToXML
  8. FromXML
  9. ToXML
  10. ToXML
  11. ToXML
  12. ToXML
  13. FromXML
  14. FromXML
  15. FromXML
  16. FromXML
  17. LoadXML
  18. Load
  19. Load
  20. Save
  21. MakeDoc

   1 // TITLE:
   2 //
   3 // VERSION:
   4 // $Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $
   5 //
   6 // AUTHOR:
   7 // Created by J.M.McGuiness, E-mail: coder@hussar.me.uk
   8 //
   9 // DESCRIPTION:
  10 // Note: You need to put the line "#import <msxml4.dll> implementation_only" in the "stdafx.cpp" or you'll get link errors with the MSXML stuff....
  11 // (I need to do this as the more simple route of omitting the "no_implementation" in this file leads to those link errors anyway, if the "#import <msxml4.dll>" is put in "stdafx.h".
  12 //
  13 // VERSION HISTORY:
  14 // 9/3/2004 Creation of version 1.0
  15 //
  16 // LEGALITIES:
  17 // Copyright © 2004 by J.M.McGuiness, all rights reserved.
  18 //
  19 // This library is free software; you can redistribute it and/or
  20 // modify it under the terms of the GNU Lesser General Public
  21 // License as published by the Free Software Foundation; either
  22 // version 2.1 of the License, or (at your option) any later version.
  23 //
  24 // This library is distributed in the hope that it will be useful,
  25 // but WITHOUT ANY WARRANTY; without even the implied warranty of
  26 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  27 // Lesser General Public License for more details.
  28 //
  29 // You should have received a copy of the GNU Lesser General Public
  30 // License along with this library; if not, write to the Free Software
  31 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  32 //
  33 /////////////////////////////////////////////////////////////////////////////
  34 
  35 namespace jmmcg { namespace NTUtils { namespace XML {
  36 
  37         inline MSXML2::IXMLDOMNodePtr __fastcall
  38         CreateNode(const node_types type,const jmmcg::tchar *node_name,const MSXML2::IXMLDOMDocumentPtr &doc,const jmmcg::tchar *xml_ns) {
  39                 static const jmmcg::tchar * const node_types_names[]={
  40                         _T("attribute"),
  41                         _T("document"),
  42                         _T("element"),
  43                         _T("text")
  44                 };
  45                 return doc->createNode(node_types_names[type],node_name,xml_ns);
  46         }
  47 
  48         inline MSXML2::IXMLDOMNodePtr __fastcall
  49         CreateNode(const node_types type,const jmmcg::tchar *node_name,const MSXML2::IXMLDOMDocumentPtr &doc,const jmmcg::tchar *xml_ns,const MSXML2::IXMLDOMNodePtr &node) {
  50                 return node->appendChild(CreateNode(type,node_name,doc,xml_ns));
  51         }
  52 
  53         inline MSXML2::IXMLDOMNodePtr __fastcall
  54         CreateComment(const jmmcg::tchar *node_name,const jmmcg::tchar *comment,const MSXML2::IXMLDOMDocumentPtr &doc,const jmmcg::tchar *xml_ns,const MSXML2::IXMLDOMNodePtr &node) {
  55                 const MSXML2::IXMLDOMNodePtr comment_node(CreateNode(element,node_name,doc,xml_ns,node));
  56                 const MSXML2::IXMLDOMTextPtr text(CreateNode(text,node_name,doc,xml_ns,comment_node));
  57                 text->nodeValue=comment;
  58                 return text;
  59         }
  60 
  61         inline jmmcg::tstring __fastcall
  62         GetParseError(const MSXML2::IXMLDOMDocumentPtr &doc) {
  63                 return jmmcg::tstring(static_cast<const jmmcg::tchar *>(doc->parseError->reason));
  64         }
  65 
  66         /////////////////////////////////////////////////////////////////////////////
  67 
  68         inline void __fastcall
  69         ToXML(const MSXML2::IXMLDOMDocumentPtr &doc,const MSXML2::IXMLDOMNodePtr &n,const POINT &pt,const jmmcg::tchar *xml_ns) {
  70                 try {
  71                         const MSXML2::IXMLDOMElementPtr node(CreateNode(element,_T("point"),doc,xml_ns,n));
  72                         node->setAttribute(_T("x"),pt.x);
  73                         node->setAttribute(_T("y"),pt.y);
  74                 } catch (const _com_error &err) {
  75                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMDocumentPtr &"),jmmcg::tostring(doc)));
  76                         info.add_arg(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n));
  77                         info.add_arg(_T("const POINT *"),jmmcg::tostring(&pt));
  78                         info.add_arg(_T("const jmmcg::tchar *"),xml_ns);
  79                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
  80                 }
  81         }
  82 
  83         inline void __fastcall
  84         FromXML(const MSXML2::IXMLDOMNodePtr &n,POINT &pt) {
  85                 try {
  86                         const MSXML2::IXMLDOMNamedNodeMapPtr attribs(n->selectSingleNode(_T("point"))->attributes);
  87                         jmmcg::fromstring(static_cast<const jmmcg::tchar *>(attribs->getNamedItem(_T("x"))->text),pt.x);
  88                         jmmcg::fromstring(static_cast<const jmmcg::tchar *>(attribs->getNamedItem(_T("y"))->text),pt.y);
  89                 } catch (const _com_error &err) {
  90                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n)));
  91                         info.add_arg(_T("const POINT *"),jmmcg::tostring(&pt));
  92                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
  93                 }
  94         }
  95 
  96         inline void __fastcall
  97         ToXML(const MSXML2::IXMLDOMDocumentPtr &doc,const MSXML2::IXMLDOMNodePtr &n,const RECT &rect,const jmmcg::tchar *xml_ns) {
  98                 try {
  99                         const MSXML2::IXMLDOMElementPtr node(CreateNode(element,_T("rectangle"),doc,xml_ns,n));
 100                         node->setAttribute(_T("top"),rect.top);
 101                         node->setAttribute(_T("left"),rect.left);
 102                         node->setAttribute(_T("bottom"),rect.bottom);
 103                         node->setAttribute(_T("right"),rect.right);
 104                 } catch (const _com_error &err) {
 105                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMDocumentPtr &"),jmmcg::tostring(doc)));
 106                         info.add_arg(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n));
 107                         info.add_arg(_T("const RECT *"),jmmcg::tostring(&rect));
 108                         info.add_arg(_T("const jmmcg::tchar *"),xml_ns);
 109                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
 110                 }
 111         }
 112 
 113         inline void __fastcall
 114         FromXML(const MSXML2::IXMLDOMNodePtr &n,RECT &rect) {
 115                 try {
 116                         const MSXML2::IXMLDOMNamedNodeMapPtr attribs(n->selectSingleNode(_T("rectangle"))->attributes);
 117                         jmmcg::fromstring(static_cast<const jmmcg::tchar *>(attribs->getNamedItem(_T("top"))->text),rect.top);
 118                         jmmcg::fromstring(static_cast<const jmmcg::tchar *>(attribs->getNamedItem(_T("left"))->text),rect.left);
 119                         jmmcg::fromstring(static_cast<const jmmcg::tchar *>(attribs->getNamedItem(_T("bottom"))->text),rect.bottom);
 120                         jmmcg::fromstring(static_cast<const jmmcg::tchar *>(attribs->getNamedItem(_T("right"))->text),rect.right);
 121                 } catch (const _com_error &err) {
 122                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n)));
 123                         info.add_arg(_T("const RECT *"),jmmcg::tostring(&rect));
 124                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
 125                 }
 126         }
 127 
 128         template<typename Value> inline void __fastcall
 129         ToXML(const MSXML2::IXMLDOMDocumentPtr &doc,const MSXML2::IXMLDOMNodePtr &n,const jmmcg::tchar *colln_name,const std::vector<Value> &colln,const jmmcg::tchar *xml_ns) {
 130                 try {
 131                         const MSXML2::IXMLDOMNodePtr colln_node(CreateNode(element,colln_name,doc,xml_ns,n));
 132                         for (std::vector<Value>::const_iterator i(colln.begin());i!=colln.end();++i) {
 133                                 const MSXML2::IXMLDOMNodePtr node(CreateNode(element,_T("node"),doc,xml_ns,colln_node));
 134                                 i->ToXML(doc,node);
 135                         }
 136                 } catch (const _com_error &err) {
 137                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMDocumentPtr &"),jmmcg::tostring(doc)));
 138                         info.add_arg(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n));
 139                         info.add_arg(_T("const jmmcg::tchar *"),colln_name);
 140                         info.add_arg(_T("const std::vector<Value> *"),jmmcg::tostring(&colln));
 141                         info.add_arg(_T("const jmmcg::tchar *"),xml_ns);
 142                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
 143                 }
 144         }
 145 
 146         template<> inline void __fastcall
 147         ToXML(const MSXML2::IXMLDOMDocumentPtr &doc,const MSXML2::IXMLDOMNodePtr &n,const jmmcg::tchar *colln_name,const std::vector<double> &colln,const jmmcg::tchar *xml_ns) {
 148                 try {
 149                         const MSXML2::IXMLDOMNodePtr colln_node(CreateNode(element,colln_name,doc,xml_ns,n));
 150                         for (std::vector<double>::const_iterator i(colln.begin());i!=colln.end();++i) {
 151                                 const MSXML2::IXMLDOMElementPtr node(CreateNode(element,_T("node"),doc,xml_ns,colln_node));
 152                                 node->setAttribute(_T("value"),*i);
 153                         }
 154                 } catch (const _com_error &err) {
 155                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMDocumentPtr &"),jmmcg::tostring(doc)));
 156                         info.add_arg(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n));
 157                         info.add_arg(_T("const jmmcg::tchar *"),colln_name);
 158                         info.add_arg(_T("const std::vector<double> *"),jmmcg::tostring(&colln));
 159                         info.add_arg(_T("const jmmcg::tchar *"),xml_ns);
 160                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
 161                 }
 162         }
 163 
 164         template<> inline void __fastcall
 165         ToXML(const MSXML2::IXMLDOMDocumentPtr &doc,const MSXML2::IXMLDOMNodePtr &n,const jmmcg::tchar *colln_name,const std::vector<unsigned long> &colln,const jmmcg::tchar *xml_ns) {
 166                 try {
 167                         const MSXML2::IXMLDOMNodePtr colln_node(CreateNode(element,colln_name,doc,xml_ns,n));
 168                         for (std::vector<unsigned long>::const_iterator i(colln.begin());i!=colln.end();++i) {
 169                                 const MSXML2::IXMLDOMElementPtr node(CreateNode(element,_T("node"),doc,xml_ns,colln_node));
 170                                 node->setAttribute(_T("value"),static_cast<long>(*i));
 171                         }
 172                 } catch (const _com_error &err) {
 173                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMDocumentPtr &"),jmmcg::tostring(doc)));
 174                         info.add_arg(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n));
 175                         info.add_arg(_T("const jmmcg::tchar *"),colln_name);
 176                         info.add_arg(_T("const std::vector<unsigned long> *"),jmmcg::tostring(&colln));
 177                         info.add_arg(_T("const jmmcg::tchar *"),xml_ns);
 178                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
 179                 }
 180         }
 181 
 182         template<> inline void __fastcall
 183         ToXML(const MSXML2::IXMLDOMDocumentPtr &doc,const MSXML2::IXMLDOMNodePtr &n,const jmmcg::tchar *colln_name,const std::vector<CPoint> &colln,const jmmcg::tchar *xml_ns) {
 184                 try {
 185                         const MSXML2::IXMLDOMNodePtr colln_node(CreateNode(element,colln_name,doc,xml_ns,n));
 186                         for (std::vector<CPoint>::const_iterator i(colln.begin());i!=colln.end();++i) {
 187                                 const MSXML2::IXMLDOMNodePtr node(CreateNode(element,_T("node"),doc,xml_ns,colln_node));
 188                                 ToXML(doc,node,*i,xml_ns);
 189                         }
 190                 } catch (const _com_error &err) {
 191                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMDocumentPtr &"),jmmcg::tostring(doc)));
 192                         info.add_arg(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n));
 193                         info.add_arg(_T("const jmmcg::tchar *"),colln_name);
 194                         info.add_arg(_T("const std::vector<CPoint> *"),jmmcg::tostring(&colln));
 195                         info.add_arg(_T("const jmmcg::tchar *"),xml_ns);
 196                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
 197                 }
 198         }
 199 
 200         template<typename Value> inline void __fastcall
 201         FromXML(const MSXML2::IXMLDOMNodePtr &n,const jmmcg::tstring &colln_name,std::vector<Value> &colln) {
 202                 try {
 203                         assert(colln.empty());
 204                         const MSXML2::IXMLDOMNodeListPtr nodes(n->selectNodes((colln_name+_T("/*")).c_str()));
 205                         for (long i=0;i<nodes->length;++i) {
 206                                 colln.push_back(Value::FromXML(nodes->item[i]));
 207                         }
 208                 } catch (const _com_error &err) {
 209                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n)));
 210                         info.add_arg(_T("const jmmcg::tchar *"),colln_name);
 211                         info.add_arg(_T("const std::vector<Value> *"),jmmcg::tostring(&colln));
 212                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
 213                 }
 214         }
 215 
 216         template<> inline void __fastcall
 217         FromXML(const MSXML2::IXMLDOMNodePtr &n,const jmmcg::tstring &colln_name,std::vector<double> &colln) {
 218                 try {
 219                         assert(colln.empty());
 220                         const MSXML2::IXMLDOMNodeListPtr nodes(n->selectNodes((colln_name+_T("/node/@value")).c_str()));
 221                         for (long i=0;i<nodes->length;++i) {
 222                                 double tmp;
 223                                 jmmcg::fromstring(static_cast<const jmmcg::tchar *>(nodes->item[i]->text),tmp);
 224                                 colln.push_back(tmp);
 225                         }
 226                 } catch (const _com_error &err) {
 227                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n)));
 228                         info.add_arg(_T("const jmmcg::tchar *"),colln_name);
 229                         info.add_arg(_T("const std::vector<double> *"),jmmcg::tostring(&colln));
 230                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
 231                 }
 232         }
 233 
 234         template<> inline void __fastcall
 235         FromXML(const MSXML2::IXMLDOMNodePtr &n,const jmmcg::tstring &colln_name,std::vector<unsigned long> &colln) {
 236                 try {
 237                         assert(colln.empty());
 238                         const MSXML2::IXMLDOMNodeListPtr nodes(n->selectNodes((colln_name+_T("/node/@value")).c_str()));
 239                         for (long i=0;i<nodes->length;++i) {
 240                                 unsigned long tmp;
 241                                 jmmcg::fromstring(static_cast<const jmmcg::tchar *>(nodes->item[i]->text),tmp);
 242                                 colln.push_back(tmp);
 243                         }
 244                 } catch (const _com_error &err) {
 245                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n)));
 246                         info.add_arg(_T("const jmmcg::tchar *"),colln_name);
 247                         info.add_arg(_T("const std::vector<unsigned long> *"),jmmcg::tostring(&colln));
 248                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
 249                 }
 250         }
 251 
 252         template<> inline void __fastcall
 253         FromXML(const MSXML2::IXMLDOMNodePtr &n,const jmmcg::tstring &colln_name,std::vector<CPoint> &colln) {
 254                 try {
 255                         assert(colln.empty());
 256                         const MSXML2::IXMLDOMNodeListPtr nodes(n->selectNodes((colln_name+_T("/*")).c_str()));
 257                         for (long i=0;i<nodes->length;++i) {
 258                                 CPoint val;
 259                                 FromXML(nodes->item[i],val);
 260                                 colln.push_back(val);
 261                         }
 262                 } catch (const _com_error &err) {
 263                         jmmcg::info::function info(__LINE__,__PRETTY_FUNCTION__,typeid(void),jmmcg::info::function::argument(_T("const MSXML2::IXMLDOMNodePtr &"),jmmcg::tostring(n)));
 264                         info.add_arg(_T("const jmmcg::tchar *"),colln_name);
 265                         info.add_arg(_T("const std::vector<CPoint> *"),jmmcg::tostring(&colln));
 266                         throw exception(err.ErrorMessage(),info,JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $")));
 267                 }
 268         }
 269 
 270         /////////////////////////////////////////////////////////////////////////////
 271 
 272         inline __stdcall
 273         DocWrapper::DocWrapper(void)
 274         : doc(MakeDoc()) {
 275                 doc->appendChild(doc->createProcessingInstruction(_T("xml"),_T("version='1.0'")));
 276                 doc->async=false;
 277         }
 278 
 279         inline __stdcall
 280         DocWrapper::DocWrapper(const DocWrapper &d)
 281         : doc(d.Doc()) {
 282                 doc->appendChild(doc->createProcessingInstruction(_T("xml"),_T("version='1.0'")));
 283                 doc->async=false;
 284         }
 285 
 286         inline __stdcall
 287         DocWrapper::~DocWrapper(void) {
 288         }
 289 
 290         inline const MSXML2::IXMLDOMDocumentPtr & __fastcall
 291         DocWrapper::Doc(void) const noexcept(true) {
 292                 return doc;
 293         }
 294 
 295         inline void __fastcall
 296         DocWrapper::LoadXML(const jmmcg::tchar *xml) {
 297                 if (doc->loadXML(xml)==VARIANT_FALSE) {
 298                         throw exception(
 299                                 GetParseError(doc),
 300                                 jmmcg::info::function(__LINE__,__PRETTY_FUNCTION__,typeid(&DocWrapper::LoadXML),jmmcg::info::function::argument(_T("const jmmcg::tchar *"),xml)),
 301                                 JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $"))
 302                         );
 303                 }
 304         }
 305 
 306         inline void __fastcall
 307         DocWrapper::Load(const jmmcg::tchar *filename) {
 308                 if (doc->load(filename)==VARIANT_FALSE) {
 309                         throw exception(
 310                                 GetParseError(doc),
 311                                 jmmcg::info::function(__LINE__,__PRETTY_FUNCTION__,typeid(&DocWrapper::Load),jmmcg::info::function::argument(_T("const jmmcg::tchar *"),filename)),
 312                                 JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $"))
 313                         );
 314                 }
 315         }
 316 
 317         inline void __fastcall
 318         DocWrapper::Load(const IStreamPtr &file_ptr) {
 319                 IUnknown *itf;
 320                 const HRESULT hr=const_cast<IStreamPtr &>(file_ptr).QueryInterface(IID_IUnknown,itf);
 321                 if (FAILED(hr) || doc->load(itf)==VARIANT_FALSE) {
 322                         throw exception(
 323                                 GetParseError(doc),
 324                                 jmmcg::info::function(__LINE__,__PRETTY_FUNCTION__,typeid(&DocWrapper::Load),jmmcg::info::function::argument(_T("const IStreamPtr &"),jmmcg::tostring(file_ptr))),
 325                                 JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $"))
 326                         );
 327                 }
 328         }
 329 
 330         inline void __fastcall
 331         DocWrapper::Save(const jmmcg::tchar *filename) {
 332 // TODO JMG                     doc->insertBefore(doc->createProcessingInstruction(_T("xml"),_T("version='1.0'")),static_cast<_variant_t>(doc->firstChild));
 333                 if (doc->save(filename)!=S_OK) {
 334                         throw exception(
 335                                 GetParseError(doc),
 336                                 jmmcg::info::function(__LINE__,__PRETTY_FUNCTION__,typeid(&DocWrapper::Save),jmmcg::info::function::argument(_T("const jmmcg::tchar *"),filename)),
 337                                 JMMCG_REVISION_HDR(_T("$Header: svn+ssh://jmmcg@svn.code.sf.net/p/libjmmcg/code/trunk/libjmmcg/experimental/NT-based/NTSpecific/XML_Stuff%20impl.hpp 2055 2017-05-13 19:35:47Z jmmcg $"))
 338                         );
 339                 }
 340         }
 341 
 342         inline MSXML2::IXMLDOMDocumentPtr __fastcall
 343         DocWrapper::MakeDoc(void) {
 344                 return MSXML2::IXMLDOMDocumentPtr(__uuidof(MSXML2::DOMDocument));
 345         }
 346 
 347 } } }

/* [<][>][^][v][top][bottom][index][help] */