2010-06-27 6 views
3

J'ai un tas de fichiers .xml avec des noeuds qui causent des complications incommodes. Je voudrais supprimer ces nœuds mais m'assurer que leurs enfants sont conservés (pas la structure hiérarchique mais les données). Finalement, je veux prendre les données de chaque fichier .xml et construire une base de données. Il semble que xmlTreeParse avec xmlToList aidera mais que ce dernier ne fonctionne bien qu'avec une structure plate. J'ai joué avec l'annulation de la sortie de xmlToList, puis la conversion d'une base de données, mais la sortie est un peu funky.Suppression de noeuds xml non désirés

Je pensais à écrire simplement une fonction à passer par tous les fichiers et supprimer tous les tags que je ne veux pas mais je ne sais pas comment faire cela dans R.

suggestions?

+0

Il serait probablement utile si vous fournissiez des exemples de xml avant et après les changements demandés. –

+0

Voici un extrait du xml je commence avec: SWES_2 0.0.2 2010-06-26T18: 19: 02,598 2010-06-26T18: 21: 11,742 Melissa 3 26/06/2010 1 dzemeni 2 684656856 0 scottyaz

+0

Je veux simplement supprimer le Tags – scottyaz

Répondre

3

C'est simple à faire en XSLT. Ajoutez ceci à l'identité transform:

<xsl:template match="poop"> 
    <xsl:apply-templates select="node()"/> 
</xsl:template> 

Utilisation d'expressions régulières sur XML hastens the coming of the Elder Gods et n'est pas recommandé.

0

voir si c'est ce que vous cherchez, vous pouvez utiliser le paquet XML de CRAN pour l'analyse de documents XML. Vous pouvez utiliser la tactique suivante pour obtenir seulement les <poop> tags:

me<-xmlTreeParse(filename,useInternalNodes=T) 
pooptags<-xpathApply(me,"//poop") 

pooptags contiendra les informations suivantes:

<poop> 
    <P3a_Village1>dzemeni</P3a_Village1> 
    <P4_HousholdNumber/> 
    <P5_VisitNumber>2</P5_VisitNumber> 
</poop> 

vous pouvez coller ce avec le <?xml version='1.0' ?> en utilisant la commande Coller dans R et l'écrire un fichier tronqué. ou vous pouvez encore extraire des informations telles que P3a_Village1 à partir du fichier XML à l'aide du xpathApply comme ceci:

village<-xpathApply(me,"//poop/P3a_Village1") 

J'espère que la solution est ce que vous recherchez. S'il vous plaît laissez-moi savoir si cela aide.

+0

merci pour l'aide. Je pense que ce serait une façon de le faire, alors j'ai décidé d'utiliser un script xslt. Tant pis... – scottyaz

Questions connexes