Я хочу преобразовать файл XML в фрейм данных. В этом XML-файле я хочу восстановить оба не вложенных элемента, если они вложены.
Я пытался проверить в нескольких онлайн-ресурсах, включая другие вопросы StackOverflow, но, будучи любителем в программировании на R, я не смог найти аналогичный пример для моего случая.
Это пример XML, который я имею в руках:
<?xml version="1.0" encoding="UTF-8"?>
<INSTITUTIONS>
<INSTITUTION>
<SORT>040706201 DIGNE-LES-BAINS MEDIATHEQUE INTERCOMMUNALE DES TROIS VALLEES. DIGNE-LES-BAINS, ALPES DE HAUTE-PROVENCE</SORT>
<DISPLAY>institution - Digne-les-Bains - Médiathèque intercommunale des Trois Vallées. Digne-les-Bains, Alpes de Haute-Provence</DISPLAY>
<BNF_STATUT display="validée">N</BNF_STATUT>
<BNF_TYPE display="institution">1</BNF_TYPE>
<BNF_UNICITE>04000 Médiathèque intercommunale des Trois Vallées. Digne-les-Bains, Alpes de Haute-Provence</BNF_UNICITE>
<XML_FIELD>
<DONCODE_SET>
<NOMORGBIB>DLL</NOMORGBIB>
<CODEISIL>FR-040706201</CODEISIL>
<PREFIXE>FR</PREFIXE>
</DONCODE_SET>
<DID_SEL>
<CODERCR>040706201</CODERCR>
<NOMETABLISSEMENT>Médiathèque intercommunale des Trois Vallées. Digne-les-Bains, Alpes de Haute-Provence</NOMETABLISSEMENT>
<NOMETABAFF>Bibliothèque municipale</NOMETABAFF>
<NOMCOURT1>6710</NOMCOURT1>
<NOMCOURT2>DIGNE-LES-BAINS - BM</NOMCOURT2>
<NOMRESPONSABLE>Marlène Camilleri</NOMRESPONSABLE>
<NOMTUTELLE>COMMUNES DE DIGNE-LES-BAINS, LA ROBINE, MARCOUS, ENTRAGES</NOMTUTELLE>
<TYPEETABABES display="BM non classée">62</TYPEETABABES>
<TYPEFAMABES display="Bibliothèque Municipale">6</TYPEFAMABES>
<TYPEINST display="Bibliothèque médiathèque municipale ou intercommunale">1</TYPEINST>
</DID_SEL>
<ADRESSES_SEL>
<ADRESSE_SET>
<ADRES_CODEPOSTAL>04000</ADRES_CODEPOSTAL>
<ADRES_LATITUDE>44.0916864</ADRES_LATITUDE>
<ADRES_LONGITUDE>6.2341449</ADRES_LONGITUDE>
</ADRESSE_SET>
</ADRESSES_SEL>
<ETAB_SEL>
<DATECREATIONETAB>1816</DATECREATIONETAB>
<HISTORIQUEETAB>La bibliothèque a été créee en 1816, d'abord départementale puis communale en 1824.
Le fonds ancien provient des couvents de Haute-Provence, Récollets de Riez, Trinitaires de Digne, Minimes de Mane et de bibliothèques d'émigrés.
En janvier 2003, la bibliothèque devient intercommunale.
Le 16 septembre 2006, la nouvelle Médiathèque est inaugurée à l'Ilot Granoux.</HISTORIQUEETAB>
</ETAB_SEL>
<SERVICES_SEL>
<SERVICE_SET>
<TYPESERVICE display="Reproduction">4</TYPESERVICE>
<SERVICE_REPRO display="Photocopie">1</SERVICE_REPRO>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Renseignements bibliographiques">7</TYPESERVICE>
<SERVICE_RENS display="Par téléphone_RS_Par télécopie_RS_Par courrier_RS_Par courrier électronique">3/4/5/6</SERVICE_RENS>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Réservation de documents">6</TYPESERVICE>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Elaboration de bibliographies">8</TYPESERVICE>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Prêt entre bibliothèques">5</TYPESERVICE>
<SERVICE_SPECIF>Prêt simple entre bibliothèques</SERVICE_SPECIF>
<SERVICE_CONDUTIL>Photocopies</SERVICE_CONDUTIL>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Consultation sur place">1</TYPESERVICE>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Prêt à domicile">3</TYPESERVICE>
<SERVICE_CONDUTIL>Tous publics</SERVICE_CONDUTIL>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Autre service">28</TYPESERVICE>
<SERVICE_SPECIF>Orientation des demandeurs sur d'autres sources</SERVICE_SPECIF>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Catalogue en ligne">10</TYPESERVICE>
<SERVICE_URL>http://www.mediatheque-digne.fr/opacwebaloes/index.aspx</SERVICE_URL>
</SERVICE_SET>
</SERVICES_SEL>
<PUBLICATIONS_SEL>
<PUBLI_GENE>Dépouillement des périodiques auxquels la Bibliothèque municipale est abonnée à partir de 1998</PUBLI_GENE>
<PUBLI_BIBLIOGR>Cauvin (C.). Les origines de la bibliothèque de Digne. 1912, 28 p. (Bulletin de la société scientifique et littéraire des Basses-Alpes, t. XV).
VIRE (M-M) - La Bibliothèque de Digne (Annales de Haute-Provence du n° 268 au n° 277).
Patrimoine des bibliothèques de France : un guide des régions, t.6, Provence-Alpes-Côte d'Azur</PUBLI_BIBLIOGR>
</PUBLICATIONS_SEL>
<INFOCOMP_SEL>
<CLASSIFICATION>Dewey pour la partie lecture publique, par format pour le fonds ancien.</CLASSIFICATION>
<CATALOGUES>Catalogues informatisés, sauf fonds ancien et 1ère partie du XX.
Catalogue général des manuscrits tIX,</CATALOGUES>
<CATALOGUECOLLECTIF_SET>
<CATALOGUECOLLECTIF>Catalogue général des manuscrits des bibliothèques publiques de France. Départements — Tome IX. pp 153-157 par Chaspoul. Digne (1-34)</CATALOGUECOLLECTIF>
</CATALOGUECOLLECTIF_SET>
<CATALOGUECOLLECTIF_SET>
<CATALOGUECOLLECTIF_CTRL display="CCFr Manuscrits">ccfm</CATALOGUECOLLECTIF_CTRL>
<CATALOGUECOLLECTIF_URL>http://ccfr.bnf.fr/portailccfr/jsp/index_view_direct_anonymous.jsp?record=eadcgm:EADI:FRCGMBPF-040706201-01a.xml</CATALOGUECOLLECTIF_URL>
</CATALOGUECOLLECTIF_SET>
<CATALOGUECOLLECTIF_SET>
<CATALOGUECOLLECTIF_CTRL display="Sudoc PS">sups</CATALOGUECOLLECTIF_CTRL>
<CATALOGUECOLLECTIF_URL>http://www.abes.fr/abes/page,366,reseau-sudoc-ps.html</CATALOGUECOLLECTIF_URL>
</CATALOGUECOLLECTIF_SET>
</INFOCOMP_SEL>
<CATALOGUE_URL_LIGNE>http://www.mediatheque-digne.fr/opacwebaloes/index.aspx</CATALOGUE_URL_LIGNE>
</XML_FIELD>
<ARK_REF>/06871/0026710</ARK_REF>
</INSTITUTION>
<INSTITUTION>
<SORT>130026201 ALLAUCH BIBLIOTHEQUE BERNARD MONGE. ALLAUCH, BOUCHES-DU-RHONE</SORT>
<DISPLAY>institution - Allauch - Bibliothèque Bernard Monge. Allauch, Bouches-du-Rhône</DISPLAY>
<BNF_STATUT display="validée">N</BNF_STATUT>
<BNF_TYPE display="institution">1</BNF_TYPE>
<BNF_UNICITE>13190 Bibliothèque Bernard Monge. Allauch, Bouches-du-Rhône</BNF_UNICITE>
<XML_FIELD>
<DONCODE_SET>
<NOMORGBIB>DLL</NOMORGBIB>
<CODEISIL>FR-130026201</CODEISIL>
<PREFIXE>FR</PREFIXE>
</DONCODE_SET>
<ADRESSES_SEL>
<ADRESSE_SET>
<ADRES_CODEPOSTAL>13190</ADRES_CODEPOSTAL>
<ADRES_COMMUNE>Allauch</ADRES_COMMUNE>
<ADRES_LATITUDE>43.3345064</ADRES_LATITUDE>
<ADRES_LONGITUDE>5.4833823</ADRES_LONGITUDE>
</ADRESSE_SET>
</ADRESSES_SEL>
<SERVICES_SEL>
<SERVICE_SET>
<TYPESERVICE display="Accès bases de données externes">12</TYPESERVICE>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Reproduction">4</TYPESERVICE>
<SERVICE_REPRO display="Photocopie">1</SERVICE_REPRO>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Réservation de documents">6</TYPESERVICE>
<SERVICE_CONDUTIL>Pour les abonnés seulement</SERVICE_CONDUTIL>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Elaboration de bibliographies">8</TYPESERVICE>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Consultation sur place">1</TYPESERVICE>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Prêt à domicile">3</TYPESERVICE>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Portage de documents à domicile">9</TYPESERVICE>
<SERVICE_CONDUTIL>Personnes handicapées qui en font la demande</SERVICE_CONDUTIL>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Catalogue en ligne">10</TYPESERVICE>
<SERVICE_URL>http://biblio.allauch.com/search1.html</SERVICE_URL>
</SERVICE_SET>
<SERVICE_SET>
<TYPESERVICE display="Compte utilisateur/lecteur">16</TYPESERVICE>
</SERVICE_SET>
</SERVICES_SEL>
</INSTITUTION>
Из всех этих элементов я бы хотел восстановить следующие значения
NOMETABLISSEMENT, TYPEFAMABES
, что довольно просто, поскольку они не являются вложенными значениями, но я также хочу восстановить
ADRES_CODEPOSTAL, ADRES_LATITUDE, ADRES_LATITUDE, ADRES_LONGITUDE
И особенно те, которые у меня были самые трудные, я хочу восстановить все
TYPE_SERVICE display=> attributes under <SERVICES_SEL> <SERVICE_SET>
Это будет ожидаемый результат, который я хочу восстановить, с каждым type_service_display, представленным в одном столбце. Зная, конечно, что в моем наборе данных все библиотеки будут иметь различное количество «служб типов» (у некоторых будет больше, а у других только один или два), но я в порядке, если у меня есть значения NA для некоторых из этих столбцов.
Ради простоты я переставил столбцы и добавил "вкладки"
|NOMETABLISSEMENT| |Médiathèque intercommunale des Trois Vallées etc.| |Bibliotheque X|
|TYPEFAMABES| |6| |3|
|ADRES_CODEPOSTAL| |4000| |3900|
|ADRES_LATITUDE| |44.0916864| |44.556|
|ADRES_LONGITUDE| |6.2341449| |6.777|
|TYPE_SERVICE DISPLAY 1| |Reproduction| |Reproduction|
|TYPE_SERVICE DISPLAY 1| |"Renseignements bibliographiques| |Réservation de documents|
|TYPE_SERVICE DISPLAY 2| |Réservation de documents| |NA|
|TYPE_SERVICE DISPLAY 2| |Elaboration de bibliographies| |NA|
Я полагаю, что для ответа потребуется в основном XPATH, чтобы он оставался рекурсивным, но я пока не могу написать что-то такого сложного, поэтому любая помощь будет принята с благодарностью.
Большое спасибо!
Камило