2017-10-10 4 views
0

XML 패키지를 사용하여 일부 메타 데이터를 추출합니다. 여기서 저자 이름을 추출하는 좋은 해결책을 찾았습니다 : https://www.r-bloggers.com/microsoft-office-metadata-with-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> 

를 (I 예로서 마지막 줄을 사용합니다) :

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

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

그러나 나는이 오류

누군가 올바른 경로를 쓸 수 있습니까?

답변

0

네임 스페이스를 제대로 설정하지 않은 것 같습니다. 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