在R中编辑XML节点属性

时间:2015-10-16 02:25:11

标签: xml r

我有一个我需要用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)

0 个答案:

没有答案