如何将嵌套的XML文件转换为数据框?

时间:2019-03-26 10:56:15

标签: r xml nested

我正在寻求将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来保持递归,但是我仍然无法编写这种复杂的内容,因此将不胜感激。

非常感谢!

卡米洛

0 个答案:

没有答案