Рекурсивный проход по элементам XML

Я выбрал tinyxml2 для парсинга XML файлов, хочу узнать как рекурсивно обойти элементы XML.

text.XML

<data>     <data>         <username>johny1994</username>         <realname>John Batcher</realname>     </data>     <data>         <username>drdre222</username>         <realname>Doctor Dree</realname>     </data> </data> 

data – первый XML элемент, за ним следует дочерний data элемент, за дочерним data следуют дочерние username и realname. Дочерних data которые идут от корневого отца элемента data может быть N количество (в моем случае 2). Нужно найти все эти дочерние data элементы и пройтись по ним рекурсивно.

Код:

tinyxml2::XMLDocument doc; tinyxml2::XMLError e = doc.LoadFile("text.xml"); if (e != tinyxml2::XML_SUCCESS) {     std::cout << "Error load file" << std::endl; }  auto root = doc.FirstChildElement("data"); if (root == nullptr) {     std::cout << "Child element not found\n"; }  // Тут должен быть какой-то код типа цикла для обработка data элементов // что-то типа for (root; root < elementCount; ++root) {}; auto rootdata = root->FirstChildElement("data"); if (rootdata == nullptr) {     std::cout << "Child (data) element not found\n" << std::endl; }  auto username = rootdata->FirstChildElement("username"); if (username == nullptr) {     std::cout << "username is null ptr" << std::endl; } std::cout << "Username:\t" << username->GetText() << std::endl;  auto realname = rootdata->FirstChildElement("username"); if (realname == nullptr) {     std::cout << "realname is null ptr" << std::endl; } std::cout << "Real name:\t" << realname->GetText() << std::endl; 

Вывод должен быть примерно следующим:

Username: johny1994 Real name: John Batcher Username: drdre222 Real name: Doctor Dre 

Тест метода в JUnit

в этом методе происходит реверс слова с использованием рекурсии и без неё.

Вопрос: как можно протестировать метод inverseString ?

 private Jinjava templateRender = new Jinjava();    @PostMapping("/reverseString") @ResponseBody public String inverseString(@RequestParam("text") String text,                             @RequestParam(value = "tailRecurse", defaultValue = "false") Boolean useTaleRecurse) {     Map<String, Object> map = Maps.newHashMap();     if (useTaleRecurse)         map.put("detail", reverseString("", text, text.length()));     else         map.put("detail", new StringBuffer(text).reverse().toString());     return templateRender.render(getTemplate("index.html"), map); }     private String reverseString(String accumulator,String source, int size) {     if (size == 0)         return accumulator;     return reverseString(accumulator.concat(source.substring(size - 1, size)), source, size - 1); } 

Android Как правильно реализовать PagerAdapter

Делаю приложение – расписание. Использую MVP + Moxy

Необходимо сделать фрагмент с выбором параметров расписания

Расписание бывает 3 видов: на неделю, на семестр, на определенную дату. У всех них имеется общее: выбор группы студентов

Я решил сделать фрагмент, где находится spinner с выбором группы.

Выбор параметров, зависящих от типа расписания, решил размещать в ViewPager.

Вопрос: Мне нужно отдельно создавать View, Presenter к каждому типу расписанию, находящихся в ViewPager. Если нет и можно все это реализовать в одном View и Presenter, то как мне получить доступ к элементам, находившихся в ViewPager?

Текущий скриншот:

введите сюда описание изображения

Главный Фрагмент:

public class SearchScheduleStudentFragment extends PresenterFragment implements SwipeRefreshLayout.OnRefreshListener, SearchScheduleStudentView {     private SwipeRefreshLayout mSwipeRefreshLayout;     private SearchScheduleStudentsPagerAdapter mSearchScheduleStudentsPagerAdapter;     private ViewPager mViewPager;     private AppCompatSpinner mSpinner;      ArrayAdapter<String> adapter;      @InjectPresenter     SearchScheduleStudentPresenter mPresenter;      @ProvidePresenter     SearchScheduleStudentPresenter providePresenter() {         return new SearchScheduleStudentPresenter(this);     }       @Override     protected SearchScheduleStudentPresenter getPresenter() {         return mPresenter;     }      public static SearchScheduleStudentFragment newInstance() {         return new SearchScheduleStudentFragment();     }      @Nullable     @Override     public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {         return inflater.inflate(R.layout.fr_search_schedule_students, container, false);      }      @Override     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {         mSwipeRefreshLayout = view.findViewById(R.id.refresher);         mViewPager = view.findViewById(R.id.search_student_schedule_pager);         mSpinner = view.findViewById(R.id.spinner_student_groups);          mSpinner.setAdapter(adapter);         mSearchScheduleStudentsPagerAdapter = new SearchScheduleStudentsPagerAdapter(getChildFragmentManager());         mViewPager.setAdapter(mSearchScheduleStudentsPagerAdapter);      }       @Override     public void onActivityCreated(@Nullable Bundle savedInstanceState) {         super.onActivityCreated(savedInstanceState);         mPresenter.getGroups();         mSwipeRefreshLayout.setOnRefreshListener(this);     }         @Override     public void showLoading() {      }      @Override     public void hideLoading() {         mSwipeRefreshLayout.setRefreshing(false);     }      @Override     public void showError() {      }      @Override     public void onRefresh() {      }      @Override     public void onDetach() {         mPresenter = null;         super.onDetach();     }      @Override     public void showSemesters(List<Semester> semesters) {      }      @Override     public void showGroups(List<GroupStudents> groupsStudents) {         List<String> groupsName = new ArrayList<>();         for (GroupStudents groupStudents : groupsStudents) {             groupsName.add(groupStudents.getName());             Log.d("Группа", groupStudents.getName());         }         adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, groupsName);         mSpinner.setAdapter(adapter);     } } 

Его View и Presenter

@InjectViewState public class SearchScheduleStudentPresenter extends BasePresenter<SearchScheduleStudentView> {      private SearchScheduleStudentView mView;      public SearchScheduleStudentPresenter(SearchScheduleStudentView view) {         mView = view;     }      public void getSemesters(){         mCompositeDisposable.add(                 ApiUtils.getApi()                 .getSemesters()                 .subscribeOn(Schedulers.io())                 .observeOn(AndroidSchedulers.mainThread())                 .subscribe(                         response -> mView.showSemesters(response)                 )         );       }      public void getGroups(){         mCompositeDisposable.add(                 ApiUtils.getApi()                 .getGroups()                 .subscribeOn(Schedulers.io())                 .observeOn(AndroidSchedulers.mainThread())                 .subscribe(                         response -> mView.showGroups(response)                 )         );     }       //Относится не к главному, а к pagerAdapter     public void getWeeks(){         mCompositeDisposable.add(                 ApiUtils.getApi()                         .getWeeks()                         .subscribeOn(Schedulers.io())                         .observeOn(AndroidSchedulers.mainThread())                         .subscribe(                                 response -> mView.showWeeks(response)                         )         );     } }    public interface SearchScheduleStudentView extends BaseView {      void showSemesters(List<Semester> semesters);      void showGroups(List<GroupStudents> groupStudents);      void showWeeks(List<Week> weeks);  } 

PagerAdapter

public class SearchScheduleStudentsPagerAdapter extends FragmentPagerAdapter {     private static int COUNT_FRAGMENT = 2;      public SearchScheduleStudentsPagerAdapter(FragmentManager fm) {         super(fm);     }      @Override     public Fragment getItem(int position) {         switch (position){             case 0:                 return SearchScheduleWeekStudentsFragment.newInstance();             case 1:                 return SearchScheduleDayStudentsFragment.newInstance();             default:                 return null;         }     }      @Override     public int getCount() {         return COUNT_FRAGMENT;     }      @Nullable     @Override     public CharSequence getPageTitle(int position) {         switch (position){             case 0:                 return "На неделю";             case 1:                 return "На дату";             default:                 return null;         }     } } 

Обращение к api

В распоряжении имею php и js Нужно делать обращения к различным api Можно ли как то это совершать чтобы не было видно где происходит это обращение, как защитить эти обращения, если делать их из под js? возможно ли вообще как то спрятать их?

sqlite3 сохранить результат SELECT в переменную

Требуется записать в переменную выборку из sqlite3 по условию. Не могу найти информации, как сохранить в переменную результаты запроса:

SELECT id FROM table WHERE ... ; 

Как это сделать? Спасибо!

Запрос на добавление данных

Непонятная ошибка, поле такое в таблице есть. Помогите пожалуйста

System.Data.OleDb.OleDbException: “Инструкция INSERT INTO содержит неизвестное имя поля ‘Фамилия’. Проверьте, что имя задано без ошибок, и повторите операцию.”

string connectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=base.mdb"; OleDbConnection myConnection; myConnection = new OleDbConnection(connectString); myConnection.Open(); var query = "INSERT INTO [Автомобили] (Позывной,Фамилия,Имя,Отчество,[Дата рождения],[Дата приема на работу],[Номер ВУ],[Дата выдачи ВУ],[Дата окончания ВУ],[На больничном],[В отпуске],Уволен,[Причина увольнения]) VALUES (9,'9','9','9',#12.12.12#,#12.12.12#,'9',#12.12.12#,#12.12.12#,true,true,true,'9')"; OleDbCommand command = new OleDbCommand(query, myConnection); command.ExecuteNonQuery(); myConnection.Close(); 

введите сюда описание изображения

Получения точного домена через PHP скрипт

У меня есть .php скрипт на хосте. Я хочу чтобы при начале его выполнения я мог узнать с какого домена был отправлен запрос на выполнение этого скрипта. То есть, к примеру есть site.com, на нём лежит файл file.php А также есть work.com, с которого я подключаю http://site.com/file.php. И в этом скрипте, при выполнении я хочу узнать, с какого домена пришёл запрос на выполнение.

Либо же есть .htaccess правило которое запрещает выполнение скриптов с других доменов, разрешая только для определённого домена?

) в теле цикла командной строки

Помогите, плиз, решить вопрос. Вот написал такой батник:

cd /d %0\.. echo off for /l %%k in (1,1,3) do ( echo (%%k) >> file%%k.txt    ) 

При его выполнении получаются файлы 1.txt, 2.txt, 3.txt, содержание коих (1, (2, (3 соответственно. Но заказывал-то я скобки с обоих сторон! Очевидно, проблема в том, что cmd.exe воспринимает закрывающую круглую скобку около параметра цикла скобкой, парной открывающей круглой скобке после

do 

Но как эту проблему решить? Гугл что-то невнятное говорит про закрывающую круглую скобку в теле цикла, там, про экранирование, в но что конкретно делать, умалчиваетъ, гад.

Empty or unknow structure in JNA

Пишу обертку для Leap Motion в Java. dll подключаю через JNA. Пытаюсь реализовать код подключения к устройству, который выглядит примерно так на языке Си:

LEAP_CONNECTION connectionHandle = NULL; LeapCreateConnection(NULL, &connectionHandle); LeapOpenConnection(connectionHandle); 

В описании про LEAP_CONNECTION сказано: “struct LEAP_CONNECTION – A handle to the Leap connection object.” И собственно это все. Что за структура, что содержит, неизвестно и не понятно. Объект класса Structure отказывается создаваться без полей. При этом дальнейшая работа с connectionHandle как бы не нужна, эта переменная будет использоваться только в вызовах. На что можно заменить Structure? Пытался играться с классом Memory, но не совсем понимаю как можно заменить Structure.ByValue Вот некоторые ссылки на документацию по Leap Motion: https://developer.leapmotion.com/documentation/v4/group___structs.html#struct_l_e_a_p___c_o_n_n_e_c_t_i_o_n

https://developer.leapmotion.com/documentation/v4/callback-example.html#ExampleConnectionc