Эффективное объединение файлов с помощью API libxml2 SAX

#c #libxml2

#c #libxml2

Вопрос:

Я пытаюсь объединить несколько файлов с помощью libxml2 SAX. Исходные файлы выглядят следующим образом:

 <xml>
   <section1>
       <data />
       <data />
   </section1>
   <section2>
       <data />
       <data />
   </section2>
   <section3>
       <data />
       <data />
   </section3>
</xml>
  

Что я хочу сделать, так это сделать так, чтобы данные из одних и тех же разделов в разных файлах были помещены в один большой файл в соответствующем разделе. Что я сделал, так это прочитал первый файл section1 и сразу записал в объединенный файл section1. Затем я делаю то же самое с другими файлами, которые я делаю. После этого я перехожу к разделу 2.

Это работает нормально, за исключением того, что я должен читать все файлы столько раз, сколько у меня есть разделов. Что мне было интересно, так это могу ли я приостановить чтение file1 после прохождения раздела 1 и продолжить его, как только раздел 1 был прочитан во всех других файлах.

Ответ №1:

Я не думаю, что это было бы возможно. Вы можете запустить вторичный синтаксический анализ в произвольное время при обратном вызове исходного файла, но я не думаю, что вы можете остановить вторичный синтаксический анализ (чтобы вернуться к исходному синтаксическому анализу) без полного завершения или прерывания 2-го.

Я бы настоятельно рекомендовал ознакомиться с xmlReader интерфейсом. Он не управляется обратными вызовами, вы звоните xmlTextReaderRead несколько раз, чтобы продвинуть его, и в любой момент вы можете переключаться между читателями. Вы определенно сможете добиться того поведения, которое ищете.

Примеры доступны по адресу http://xmlsoft.org/examples/index.html#xmlReader