Я пытаюсь создать объект dataframe из файла XML. Задача казалась простой, но после многих попыток я не могу извлечь именно то, что хочу.
Исходные данные взяты отсюда:
https://www.data.gouv.fr/fr/datasets/repertoire-national-des-certifications-professionnelles-et-repertoire-specifique/#resource-071a7029-f237-40b1-81ca-e3c1d78282b7
По сути, документ имеет более 17 тысяч узлов с тем же именем, что и FICHES. Одним из таких подузлов является BLOCS_COMPETENCES. У этого подузла есть еще один под названием BLOC_COMPETENCES (разница в том, что S в BLOC), и у этого есть 2 интересующих меня узла: CODE и LIBELLE.
Однако не все FICHES имеют одинаковые атрибуты и/или дочерние узлы. Более того, некоторые из них имеют 1 BLOC_COMPETENCES с 1, 2, 3 или вообще без элементов.
Следуя этому документу (среди прочих сообщений), я попытался извлечь корневой узел и получить доступ к элементам с помощью xpath:
# Import the file after zip extraction
RNCP_aout2020 <- xmlParse("U:/RNCP_2020/Fiches-rncp-2020-08-03/export_fiches_RNCP_2020-08-03.xml", encoding = "UTF-8")
# Finding root node
rootNode <- xmlRoot(RNCP_aout2020)
BLOCS_COMPETENCES <- as.data.frame(xpathSApply(rootNode, '/FICHES/FICHE/BLOCS_COMPETENCES/BLOC_COMPETENCES/CODE', xmlValue))
Это работает для извлечения всех присутствующих узлов и атрибутов. Например, следующая строка работает при извлечении идентификатора каждой FICHES:
# Extract ID
NUMERO_FICHE <- as.data.frame(xpathSApply(rootNode, '/FICHES/FICHE/NUMERO_FICHE', xmlValue))
Но когда я пытаюсь использовать это для BLOC_COMPETENCES, длина отличается, что делает невозможным слияние с другими столбцами.
Я могу предоставить весь код, который я пробовал, но не репрекс в формате CSS (на данный момент), потому что я не знаю, как подмножить большой файл.
Любая помощь будет действительно оценена!