使用R中的XML包提取文件中的修改日期

使用R中的XML包提取文件中的修改日期

问题描述:

我正在使用XML包提取一些元数据。我找到了一个很好的解决方案来提取作者姓名:https://www.r-bloggers.com/microsoft-office-metadata-with-r/。使用代码的第一行 我得到这个:使用R中的XML包提取文件中的修改日期

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) 

,我想提取这些行的信息:使用下面的代码

<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> 

(我将使用最后一行为例):

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

,但我得到这个错误:

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" 
> 

有人可以帮助写出正确的路径吗?

看起来你没有正确设置你的名字空间。您需要设置dctermsxsi,并且xpath名称空间中的dcterms的URL需要与原始XML文档中使用的URL相同。加上你的XPATH用于过滤属性是有点关闭。尝试

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

它的工作。谢谢! :)但为什么你必须改变名称空间的设置?有什么地方可以阅读更多关于它的信息吗?再次感谢 –

+0

好吧,你的XML文档使用命名空间,所以你的xpath查询也必须定义它们。这不是R特定的,但也许这个指南可能有助于给出一个概述:https://msdn.microsoft.com/en-us/library/ms950779.aspx – MrFlick