XIOS  1.0
Xml I/O Server
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Amis Macros
xml_parser_impl.hpp
Aller à la documentation de ce fichier.
1 #ifndef __XIOS_CXML_PARSER_IMPL__
2 #define __XIOS_CXML_PARSER_IMPL__
3 
5 #include "xml_parser.hpp"
6 
7 namespace xios
8 {
9  namespace xml
10  {
11  template <class T> void CXMLParser::ParseInclude(StdIStream & stream, const string& fluxId, T& object)
12  {
13  StdOStringStream oss;
14  while(!stream.eof() && !stream.fail ()) oss.put(stream.get());
15  const StdString xmlcontent( oss.str(), 0, oss.str().size()-1 );
16  try
17  {
18  rapidxml::xml_document<char> doc;
19  doc.parse<0>(const_cast<char*>(xmlcontent.c_str()));
20  CXMLNode node(doc.first_node());
21  object.parse(node);
22  }
23  catch (rapidxml::parse_error & exc)
24  {
25  const char* ptr = exc.where<char>() ;
26  const char* begin = xmlcontent.c_str() ;
27  const char* content=oss.str().c_str() ;
28  size_t pos=ptr-begin ;
29  int lineNumber = 1 ;
30  int columnNumber = 0 ;
31  const char* line;
32  const char* endLine;
33 
34  for(const char* i=content;i<content+pos; ++i, ++columnNumber) if (*i=='\n') { lineNumber++ ; line=i ; columnNumber=0 ;}
35  for(endLine=content+pos; *endLine!='\n' && *endLine!='\0' ; ++endLine) ;
36  string strLine(line,endLine-line) ;
37 
38  ERROR("CXMLParser::ParseStream(StdIStream & stream)", << endl
39  << "Error is occuring when parsing XML flux from <"<<fluxId<<"> at character "<< pos<<" line "<<lineNumber<<" column "<< columnNumber<< endl
40  << strLine<<endl
41  << string(columnNumber-1,'x')<<'^'<<endl)
42 // <<" Error : " << exc.what() )
43  }
44  }
45 
46  } // namespace xml
47 } // namespace xios
48 
49 #endif // __XIOS_CXML_PARSER_IMPL__
50 
std::string StdString
Definition: xios_spl.hpp:48
#define xios(arg)
std::istream StdIStream
Definition: xios_spl.hpp:47
CATCH CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar *scalarDestination, CScalar *scalarSource, CReduceScalarToScalar *algo ERROR)("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)",<< "Operation must be defined."<< "Scalar source "<< scalarSource->getId()<< std::endl<< "Scalar destination "<< scalarDestination->getId())
static void ParseInclude(StdIStream &stream, const string &fluxId, T &object)
std::ostringstream StdOStringStream
Définition de types (issus de la bibliothèque standard)///.
Definition: xios_spl.hpp:41