我有一个我需要用R编辑的XML文件。对于特定节点,我需要根据不同属性的值更改一个属性。让我试着澄清,这里是一些代码和结果对象:
>xmlfile = xmlParse("example.txt")
>print(xmlfile)
<?xml version="1.0"?>
<GColumn Name="Gross">
<dataHead>
<data year="2015" value="0"/>
<data year="2016" value="0"/>
</dataHead>
</GColumn>
>gCol=getNodeSet(xmlfile, "//GColumn[@Name='Gross']")
>gItem = gCol[[1]][[1]]
>print(class(gemItem))
[1] "XMLInternalElementNode" "XMLInternalNode"
[3] "XMLAbstractNode"
>print(gItem)
<dataHead>
<data year="2015" value="0"/>
<data year="2016" value="0"/>
</dataHead>
# the mapping of years to values
>map = matrix(data=c(2015,1,2016,2),nrow=2,ncol=2,byrow=TRUE)
>print(map)
[,1] [,2]
[1,] 2015 1
[2,] 2016 2
如何编辑值属性?此外,我有一个与每年匹配一定值的矩阵(例如,2015对应于1,2016对应于2)。如何根据此映射编辑每个值?
编辑:
我认为我找到了一个解决方案,这要归功于访问xmlAttrs()函数的建议。
setYears = 2000:2100
setValues = 1:length(setYears) # dummy values
setMap = data.frame(setYears,setValues)
# create function to change the "value" attribute depending upon the "year", drawing upon the mapping in the setMap dataframe
changeXML <- function(obj){
xmlAttrs(obj)=c(value=match( as.numeric(xmlGetAttr(obj,"year")),setMap$setYears))
}
xmlSApply(dataHead,changeXML)