【问题标题】:Extract modified date from file using the XML package in R使用 R 中的 XML 包从文件中提取修改日期
【发布时间】:2018-03-21 22:58:10
【问题描述】:

我正在使用 XML 包来提取一些元数据。我在这里找到了一个很好的解决方案来提取作者姓名:https://www.r-bloggers.com/microsoft-office-metadata-with-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)

我想从这些行中提取信息:

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

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

【问题讨论】:

    标签: r xml metadata


    【解决方案1】:

    您似乎没有正确设置命名空间。您需要同时设置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]])
    

    【讨论】:

    • 成功了。谢谢! :) 但是为什么你必须改变命名空间的设置呢?有什么地方可以让我了解更多信息吗?再次感谢
    • 好吧,您的 XML 文档使用名称空间,因此您的 xpath 查询也必须定义它们。它不是 R 特定的,但也许本指南可能有助于概述:msdn.microsoft.com/en-us/library/ms950779.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2023-01-25
    • 2017-10-23
    • 2010-10-13
    • 1970-01-01
    相关资源
    最近更新 更多