Новое здесь. Я часто использую 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, не повторяя каждый из них? Или это просто ограничение формата файла? Долгосрочной целью было бы поместить очень маленькое подмножество этого файла во фрейм данных.
Спасибо!