Bastien.Ferland-Raymond at mrnf.gouv.qc.ca
2012-Apr-26 12:04 UTC
[R] Modifying values into XML with R
Dear R gurus, I use R all the time at work, so one day a problem managing my personal arise data made me think: "Why not use R, it does everything!". Anyway, my goal is to use R to manage my personal music library, and more precisely my playcounts. I have two XML files, one from Winamp and the other one from Itunes. Both have pretty much the same songs, but their playcounts are different. I want to import both of them in R, merge their playcounts and export it back to a XML file that I will be able to reload in Winamp (or Itunes). So far, I managed to import in R both libraries, extract their playcounts and merge them. But now I'm stuck at putting back this new playcount into the original XML. Here is a reproducible example showing what I want to do: ###### ### first download one of my xml from : ## https://www.dropbox.com/s/qxteao3z8ypyfqh/petitXMLwinamp.xml ## load it in R and root it: winamp<-xmlTreeParse("petitXMLwinamp.xml", useInternal = T) racine <- xmlRoot(winamp) racine # to view the library ### I can extract one song (the first one for the example): une.chanson <- xmlSApply(racine[[1]][["dict"]][[2]],xmlValue) ### I can extract the playcount of this track with: racine[[1]][["dict"]][[2]][which.max(une.chanson =="Play Count")+1] ### Now, I would simply want to change it from 2 to, lets say, 17: racine[[1]][["dict"]][[2]][which.max(une.chanson =="Play Count")+1] <- 17 ### it doesn't work, I get the error: Error in racine[[1]][["dict"]][[2]][which.max(une.chanson == "Play Count") + : object of type 'externalptr' is not subsettable ### If I try again digging further into the node I get the same error but with a different outcome: racine[[1]][["dict"]][[2]][which.max(une.chanson =="Play Count")+1][[1]][[1]]<-17 #Error in racine[[1]][["dict"]][[2]][which.max(une.chanson == "Play Count") + : # object of type 'externalptr' is not subsettable racine[[1]][["dict"]][[2]][which.max(une.chanson =="Play Count")+1] #$integer #<integer>217</integer> #attr(,"class") #[1] "XMLInternalNodeList" "XMLNodeList" ### It created an error, but appended 17 to the 2 to create 217... ###### Anybody here have an idea how to just change values of my XML document? Also, the class of my playcount node is "XMLNodeList". What is a "XMLNodeList"? I can't find any reference of it in the XML package manual, so I don't know how to manage it and create it. The solution may be into switching from XMLNodeList to XMLNode and back to XMLNodeList. Anyway, those things are kind of complicated, I don't think I understand well yet the whole XML structure. Thanks in advance for your help, don't hesitate to ask questions if you need precision. Bastien R version 2.14.1 (2011-12-22) Platform: i386-pc-mingw32/i386 (32-bit) on Windows
Possibly Parallel Threads
- How to read PMML data from a text file and convert it to a model ?
- Versions 0.50-1 of the np and npRmpi packages released - new features and deprecated options…
- Versions 0.50-1 of the np and npRmpi packages released - new features and deprecated options…
- Package np version 0.20-0 released to CRAN
- Package np version 0.20-0 released to CRAN