2017-10-10 3 views
0

XMLパッケージを使用してメタデータを抽出しています。ここに著者名を抽出するための素晴らしいソリューションが見つかりました:https://www.r-bloggers.com/microsoft-office-metadata-with-r/。 私はこれを取得するコードの最初の行の使用:XMLパッケージを使用してファイルから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" 
> 

誰かが正しいパスを書き込むのに役立つことができますか?

答えて

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

関連する問題