Changeset 462 for XIOS/trunk/src/xml_parser_impl.hpp
- Timestamp:
- 01/21/14 09:40:14 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/xml_parser_impl.hpp
r352 r462 9 9 namespace xml 10 10 { 11 template <class T> void CXMLParser::ParseInclude(StdIStream & stream, T& object)11 template <class T> void CXMLParser::ParseInclude(StdIStream & stream, const string& fluxId, T& object) 12 12 { 13 13 StdOStringStream oss; 14 while(!stream.eof() && !stream.fail ()) 15 oss.put(stream.get());14 while(!stream.eof() && !stream.fail ()) oss.put(stream.get()); 15 const StdString xmlcontent( oss.str(), 0, oss.str().size()-1 ); 16 16 try 17 17 { 18 const StdString xmlcontent( oss.str(), 0, oss.str().size()-1 );19 18 rapidxml::xml_document<char> doc; 20 19 doc.parse<0>(const_cast<char*>(xmlcontent.c_str())); … … 24 23 catch (rapidxml::parse_error & exc) 25 24 { 26 ERROR("CXMLParser::ParseStream(StdIStream & stream)", 27 << "RapidXML error : " << exc.what() << " !"); 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() ) 28 43 } 29 44 }
Note: See TracChangeset
for help on using the changeset viewer.