R: xmlEventParse con gran entrada XML de nodo variable y conversión a marco de datos

Tengo ~ 100 archivos XML de datos de publicación cada uno> 10 GB con el siguiente formato:

<?xml version="1.0" encoding="UTF-8"?> 
<records xmlns="http://website”>
<REC rid=“this is a test”>
    <UID>ABCD123</UID>
    <data_1>
        <fullrecord_metadata>
            <references count=“3”>
                <reference>
                    <uid>ABCD2345</uid>
                </reference>
                <reference>
                    <uid>ABCD3456</uid>
                </reference>
                <reference>
                    <uid>ABCD4567</uid>
                </reference>
            </references>
        </fullrecord_metadata>
    </data_1>
</REC>
<REC rid=“this is a test”>
    <UID>XYZ0987</UID>
    <data_1>
        <fullrecord_metadata>
            <references count=“N”>
            </references>
        </fullrecord_metadata>
    </data_1>
</REC>
</records>

, con variación en el número de referencias para cada entrada única (indexada por UID), algunas de las cuales pueden ser cero.

El objetivo: crear 1 data.frame simple por archivo XML de la siguiente manera:

UID        reference
ABCD123    ABCD2345
ABCD123    ABCD3456
ABCD123    ABCD4567
XYZ0987    NULL

Debido al tamaño de los archivos y la necesidad de un bucle eficiente en muchos archivos, he estado explorando xmlEventParse para limitar el uso de memoria. Puedo extraer con éxito la clave "UID" única para cada "REC" y crear un marco de datos utilizando el siguiente código de preguntas anteriores:

branchFunction <- function() {
 store <- new.env() 
 func <- function(x, ...) {
 ns <- getNodeSet(x, path = "//UID")
 key <- xmlValue(ns[[1]])
 value <- xmlValue(ns[[1]])
 print(value)
 store[[key]] <- value
}
 getStore <- function() { as.list(store) }
 list(UID = func, getStore=getStore)
}

 myfunctions <- branchFunction()

 xmlEventParse(
  file = "test.xml", 
  handlers = NULL, 
  branches = myfunctions
 )

 DF <- do.call(rbind.data.frame, myfunctions$getStore())

Pero no puedo almacenar con éxito los datos de referencia ni manejar la variación en los números de referencia para un solo UID. Gracias por cualquier sugerencia!

Respuestas a la pregunta(1)

Su respuesta a la pregunta