FMX_PROC(errcode) BE_XPathAll ( short /* funcId */, const ExprEnv& /* environment */, const DataVect& data_vect, Data& results ) { errcode error_result = kNoError; TextAutoPtr txt; try { int numParams = data_vect.Size(); StringAutoPtr xml = ParameterAsUTF8String ( data_vect, 0 ); StringAutoPtr xpath = ParameterAsUTF8String ( data_vect, 1 ); StringAutoPtr nsList( new string); if (numParams > 2) nsList = ParameterAsUTF8String ( data_vect, 2 ); results.SetAsText(*ApplyXPathAll (xml, xpath, nsList), data_vect.At(0).GetLocale() ); } catch ( bad_alloc e ) { error_result = kLowMemoryError; } catch ( exception e ) { error_result = kErrorUnknown; } return error_result; } // BE_XPathAll
FMX_PROC(errcode) BE_WriteTextToFile ( short /* funcId */, const ExprEnv& /* environment */, const DataVect& data_vect, Data& results) { errcode error_result = kNoError; try { WStringAutoPtr file = ParameterAsWideString ( data_vect, 0 ); basic_path<wstring, wpath_traits> path = *file; // should the text be appended to the file or replace any existing contents ios_base::openmode mode = ios_base::trunc; if ( data_vect.Size() == 3 ) { bool append = data_vect.AtAsBoolean ( 2 ); if ( append ) { mode = ios_base::app; } } StringAutoPtr text_to_write = ParameterAsUTF8String ( data_vect, 1 ); try { basic_path<wstring, wpath_traits> filesystem_path ( path ); boost::filesystem::ofstream output_file ( filesystem_path, ios_base::out | mode ); output_file.exceptions ( boost::filesystem::ofstream::badbit | boost::filesystem::ofstream::failbit ); output_file << *text_to_write; output_file.close(); } catch ( basic_filesystem_error<wpath> e ) { error_result = e.code().value(); } catch ( exception e ) { error_result = errno; // unable to write to the file } SetNumericResult ( error_result, results ); } catch ( bad_alloc e ) { error_result = kLowMemoryError; } catch ( exception e ) { error_result = kErrorUnknown; } return error_result; } // BE_WriteTextToFile