Эффективный анализ больших файлов XML с использованием R - PullRequest
0 голосов
/ 18 октября 2019

Новое здесь. Я часто использую R, но я довольно незнаком с XML. Я ищу совет для эффективного цикла и агрегирования больших файлов XML (~ 200 МБ) от здесь . У меня есть XML-файлы с элементами, которые выглядят так:

<OpportunitySynopsisDetail_1_0>
    <OpportunityID>134613</OpportunityID>
    <OpportunityTitle>Research Dissemination and Implementation Grants (R18)</OpportunityTitle>
    <OpportunityNumber>PAR-12-063</OpportunityNumber>
    ...
</OpportunitySynopsisDetail_1_0>

Ни один из подэлементов не имеет дочерних элементов или атрибутов. Единственным усложняющим фактором является то, что некоторые элементы могут иметь несколько экземпляров одного дочернего типа.

Я уже скачал и проанализировал один файл с помощью пакета xml2, и у меня есть xml_nodeset. Я также успешно поэкспериментировал с извлечением данных из подмножеств набора узлов (т. Е. Первых 100 узлов). Вот пример того, что я сделал для извлечения элементов без подэлемента «ArchivedDate»:

for(i in c(1:100)){
    if (is.na(
        xml_child(nodeset[[i]],"d1:ArchiveDate",xml_ns(xmlfile)))){
        print(paste0("Entry ",i," is not archived."))

Вот проблема: если я заменю 100 на length(nodeset), который равен 56k +, эта вещь будет длиться вечноперебирать. Есть ли лучший способ отфильтровать и проанализировать элементы XML, не повторяя каждый из них? Или это просто ограничение формата файла? Долгосрочной целью было бы поместить очень маленькое подмножество этого файла во фрейм данных.

Спасибо!

...