2017-10-10 11 views
0

J'utilise le package XML pour extraire des métadonnées. J'ai trouvé une bonne solution pour extraire le nom des auteurs ici: https://www.r-bloggers.com/microsoft-office-metadata-with-r/. Utilisation de la première ligne du code que je reçois ceci:Extraire la date de modification du fichier à l'aide du package XML dans R

library(XML) 
doc <- xmlInternalTreeParse('<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <dc:title>CHR-nr</dc:title> 
     <dc:subject/> 
     <dc:creator>XXXXXX</dc:creator> 
     <cp:keywords/> 
     <dc:description/> 
     <cp:lastModifiedBy>XXXXXX</cp:lastModifiedBy> 
     <cp:revision>1</cp:revision> 
     <cp:lastPrinted>2013-03-22T12:16:00Z</cp:lastPrinted> 
     <dcterms:created xsi:type="dcterms:W3CDTF">2013-03-22T12:13:00Z</dcterms:created> 
     <dcterms:modified xsi:type="dcterms:W3CDTF">2013-03-22T12:24:00Z</dcterms:modified> 
    </cp:coreProperties>', asText=TRUE) 

et je veux extraire les informations de ces lignes:

<dcterms:created xsi:type="dcterms:W3CDTF">2013-03-22T12:13:00Z</dcterms:created> 
    <dcterms:modified xsi:type="dcterms:W3CDTF">2013-03-22T12:24:00Z</dcterms:modified> 

en utilisant le code suivant (je vais utiliser la dernière ligne comme exemple):

ns=c('dcterms'= 'http://purl.org/dc/elements/1.1/') 
date = xmlValue(getNodeSet(doc, '/*/dcterms:modified\ xsi:type=\"dcterms:W3CDTF\"', namespaces=ns)[[1]]) 

mais je reçois cette erreur:

XPath error : Invalid expression 
/*/dcterms:modified xsi:type="dcterms:W3CDTF" 
        ^
Error in xpathApply.XMLInternalDocument(doc, path, fun, ..., namespaces = namespaces, : 
    error evaluating xpath expression /*/dcterms:modified xsi:type="dcterms:W3CDTF" 
> 

Quelqu'un peut-il aider à écrire le bon chemin?

Répondre

0

Il semblerait que vous n'ayez pas correctement configuré vos espaces de noms. Vous devez configurer à la fois dcterms et xsi et l'URL de dcterms dans votre espace de noms xpath doit être la même que celle utilisée dans le document XML d'origine. Plus votre XPATH pour le filtrage par attribut était un peu éteint. Essayez

ns <- c('dcterms'= 'http://purl.org/dc/terms/', 
    'xsi'="http://www.w3.org/2001/XMLSchema-instance") 
xq <- '/*/dcterms:modified[@xsi:type=\"dcterms:W3CDTF\"]' 
date <- xmlValue(getNodeSet(doc, xq, namespaces=ns)[[1]]) 
+0

Cela a fonctionné. Merci! :) Mais pourquoi devez-vous changer la configuration des espaces de noms? Y a-t-il un endroit où je peux en lire plus à ce sujet? Merci encore une fois –

+0

Eh bien, votre document XML utilise des espaces de noms, donc votre requête xpath doit également les définir. Ce n'est pas spécifique à R mais peut-être ce guide pourrait vous aider à donner un aperçu: https://msdn.microsoft.com/en-us/library/ms950779.aspx – MrFlick