目次
主に内部Cレベルオブジェクトに基づくXpath式の振る舞い方を調べる。
http://www.omegahat.org/RSXML/
xml文書をTree構造ではなくline構造で処理できるようにする。
内部オブジェクトでxmlを指定すると、ポインタでの操作になるため、Xpath式で検索を行う必要がある(らしい)。
ちなみにサンプルデータはiTunesのプロパティリストファイルだ。
これをうまく使うと、自分が持っているiTunesでのアーティストの分析ができそうだ。
library(XML) fileName <- system.file("exampleData", "iTunes.plist", package = "XML") doc <- xmlTreeParse(fileName, useInternal = TRUE) nodes <- getNodeSet(doc, "//key[text() = 'Artist']") sapply(nodes, function(x) xmlValue(getSibling(x)))
実行結果
> library(XML) > fileName <- system.file("exampleData", "iTunes.plist", package = "XML") > doc <- xmlTreeParse(fileName, useInternal = TRUE) > nodes <- getNodeSet(doc, "//key[text() = 'Artist']") > sapply(nodes, function(x) xmlValue(getSibling(x))) [1] "Norah Jones" "Norah Jones"
getNodeSet関数でターゲットの内部クラスとXpath式を指定する。
内部クラス:doc Xpath式://key[text() = 'Artist']
xmlValue(getSibling(x))で値を取り出す。
ここでは、"Norah Jones"が2つ取り出された。
サンプルデータ:iTunes.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Major Version</key><integer>1</integer> <key>Minor Version</key><integer>1</integer> <key>Application Version</key><string>7.5</string> <key>Features</key><integer>1</integer> <key>Show Content Ratings</key><true/> <key>Music Folder</key><string>file://localhost/Users/duncan/Music/iTunes/iTunes%20Music/</string> <key>Library Persistent ID</key><string>BD55EC2E7FDB1DAE</string> <key>Tracks</key> <dict> <key>181</key> <dict> <key>Track ID</key><integer>181</integer> <key>Name</key><string>Don't Know Why</string> <key>Artist</key><string>Norah Jones</string> <key>Composer</key><string>Jesse Harris</string> <key>Album</key><string>Come Away With Me</string> <key>Genre</key><string>Jazz</string> <key>Kind</key><string>AAC audio file</string> <key>Size</key><integer>3031411</integer> <key>Total Time</key><integer>186152</integer> <key>Disc Number</key><integer>1</integer> <key>Disc Count</key><integer>1</integer> <key>Track Number</key><integer>1</integer> <key>Track Count</key><integer>14</integer> <key>Year</key><integer>2002</integer> <key>Date Modified</key><date>2007-02-05T10:46:04Z</date> <key>Date Added</key><date>2005-08-22T21:14:30Z</date> <key>Bit Rate</key><integer>128</integer> <key>Sample Rate</key><integer>44100</integer> <key>Play Count</key><integer>24</integer> <key>Play Date</key><integer>3274252284</integer> <key>Play Date UTC</key><date>2007-10-02T21:31:24Z</date> <key>Persistent ID</key><string>D7F9F158A4A48E53</string> <key>Track Type</key><string>File</string> <key>Location</key><string>file://localhost/Users/duncan/Music/iTunes/iTunes%20Music/Norah%20Jones/Come%20Away%20With%20Me/01%20Don't%20Know%20Why.m4a</string> <key>File Folder Count</key><integer>-1</integer> <key>Library Folder Count</key><integer>-1</integer> </dict> <key>182</key> <dict> <key>Track ID</key><integer>182</integer> <key>Name</key><string>Seven Years</string> <key>Artist</key><string>Norah Jones</string> <key>Composer</key><string>Lee Alexander</string> <key>Album</key><string>Come Away With Me</string> <key>Genre</key><string>Jazz</string> <key>Kind</key><string>AAC audio file</string> <key>Size</key><integer>2376546</integer> <key>Total Time</key><integer>145262</integer> <key>Disc Number</key><integer>1</integer> <key>Disc Count</key><integer>1</integer> <key>Track Number</key><integer>2</integer> <key>Track Count</key><integer>14</integer> <key>Year</key><integer>2002</integer> <key>Date Modified</key><date>2007-02-05T10:46:05Z</date> <key>Date Added</key><date>2005-08-22T21:14:49Z</date> <key>Bit Rate</key><integer>128</integer> <key>Sample Rate</key><integer>44100</integer> <key>Play Count</key><integer>23</integer> <key>Play Date</key><integer>3274252429</integer> <key>Play Date UTC</key><date>2007-10-02T21:33:49Z</date> <key>Persistent ID</key><string>D7F9F158A4A48E54</string> <key>Track Type</key><string>File</string> <key>Location</key><string>file://localhost/Users/duncan/Music/iTunes/iTunes%20Music/Norah%20Jones/Come%20Away%20With%20Me/02%20Seven%20Years.m4a</string> <key>File Folder Count</key><integer>-1</integer> <key>Library Folder Count</key><integer>-1</integer> </dict> </dict> </dict> </plist>