Объединение файлов GDML

#python-3.x #lxml

Вопрос:

В руководстве по GDML описано, как настроить несколько файлов GDML следующим образом.

Несколько файлов GDML

Теперь в lxml есть возможность анализировать несколько файлов следующим образом

 from lxml import etree
parser = etree.XMLParser(resolve_entities=True)
root= etree.parse(filename, parser=parser)
 

Я предполагаю, что, по крайней мере, под прикрытием, он должен объединить несколько файлов перед анализом.

Мой вопрос в том, есть ли способ, которым я могу просто сохранить объединенные файлы, так как я хотел бы иметь возможность объединять и сохранять БОЛЬШОЕ ( > 100 ) количество xml-файлов, где они указаны как включенные в файл gdml, и отбросить определения !СУЩНОСТЕЙ.

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

Я думаю, что одним из вариантов было бы закодировать что-то вроде

  gdml = etree.tostring('gdml')
 etree.ElementTree(gdml).write('filename')
 

Но есть опасения, что я могу достичь максимального размера строки, который, как я понимаю, будет ограничен максимальным адресуемым размером.

    import sys
   sys.maxsize
 

Интересно, есть ли лучший способ.

Комментарии:

1. Лучший способ, чем использование lxml для разрешения сущностей при разборе? По-моему, нет. Вы всегда можете проанализировать объявления сущностей, чтобы получить системные идентификаторы, а затем обработать остальную часть файла GDML (XML) в виде текста и сопоставить ссылки на сущности, а затем заменить их содержимым соответствующего файла, но затем вам придется вручную очистить тип документа, чтобы удалить объявления сущностей. (Если вам нужно их удалить. Технически вы могли бы оставить их.) Я также не уверен, сколько времени на обработку это сэкономит.

2. Следовало бы лучше объяснить ситуацию, если ROOT не поддерживает несколько файлов GDML, как это делает Geant4. Хотите создать утилиту для обработки многофайловой настройки gdml и вывода только одного файла, в котором нет типа ДОКУМЕНТА, НЕТ СУЩНОСТЕЙ и нет amp;includefile;, с которым мог бы справиться ROOT. Необходимо уметь обрабатывать большое количество включений. Возможно, было бы лучше со сценариями unix/linux, но если бы это можно было сделать с помощью python, было бы хорошо.

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